Firebirdのバージョンによる登録可能文字の違い

Firebirdのバージョンによって、登録できる文字に違いがあるようなので調べてみました。



テスト内容



「DEFAULT CHARACTER SET」を指定して、データベースを作成します。
「SJIS_0208」「UTF8」「UNICODE_FSS」の三種類でテストしました。

データベースを作成するコマンドは、以下のようになります。

CREATE DATABASE 'C:\database\test.fdb' USER 'SYSDBA' PASSWORD 'masterkey'
DEFAULT CHARACTER SET SJIS_0208;

CREATE DATABASE 'C:\database\test.fdb' USER 'SYSDBA' PASSWORD 'masterkey'
DEFAULT CHARACTER SET UTF8;

CREATE DATABASE 'C:\database\test.fdb' USER 'SYSDBA' PASSWORD 'masterkey'
DEFAULT CHARACTER SET UNICODE_FSS;





「DEFAULT CHARACTER SET」を指定して作成したデータベースに、char(10)のフィールドを持つ
テーブルを作成します。

登録してみるのは、機種依存文字4種類。

103_01.png

最後の文字は、こちらを参考に採用しました。

「叱」の印刷標準字体の表示テスト
http://blog.motoyuki.net/2008/06/post_1125.html



加えて、全角の数字

'1234567890'
'12345678901'



半角の数字

'1234567890'
'12345678901234567890'
'123456789012345678901234567890'
'1234567890123456789012345678901'



char(10)での宣言なので、'1234567890'と'1234567890'以外はエラーになるはずです。




データの登録は、Javaで作成したプログラムで行います。


  1. package sample;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. import java.util.Properties;
  7. public class Main {
  8.     
  9.     public static void main(String[] args) throws Exception {
  10.         
  11.         String url = "jdbc:firebirdsql://localhost:3050/c:/database/test.fdb";
  12.         
  13.         Properties prop = new Properties();
  14.         prop.put("user", "sysdba");
  15.         prop.put("password", "masterkey");
  16.         
  17.         //作成したデータベースの文字コードに従い変更する
  18.         prop.put("lc_ctype", "SJIS_0208");
  19.         //prop.put("lc_ctype", "UTF8");
  20.         //prop.put("lc_ctype", "UNICODE_FSS");
  21.         
  22.         Connection con = DriverManager.getConnection(url, prop);
  23.         Statement stmt = con.createStatement();
  24.         stmt.execute("CREATE TABLE t (char_ten CHAR(10))");
  25.         
  26.         test(stmt, "㈱");
  27.         test(stmt, "ⅲ");
  28.         test(stmt, "髙");
  29.         test(stmt, "■");
  30.         test(stmt, "1234567890");
  31.         test(stmt, "12345678901");
  32.         test(stmt, "1234567890");
  33.         test(stmt, "12345678901234567890");
  34.         test(stmt, "123456789012345678901234567890");
  35.         test(stmt, "1234567890123456789012345678901");
  36.         
  37.         stmt.close();
  38.         con.close();
  39.         
  40.     }
  41.     
  42.     
  43.     private static void test(Statement stmt, String value) {
  44.         
  45.         boolean result = false;
  46.         
  47.         try {
  48.             stmt.execute("INSERT INTO t (char_ten) VALUES ('" + value + "')");
  49.             
  50.             ResultSet rs = stmt.executeQuery("SELECT char_ten FROM T");
  51.             while (rs.next()) {
  52.                 String dbvalue = rs.getString("char_ten").trim();
  53.                 if (value.equals(dbvalue)) {
  54.                     result = true;
  55.                 }
  56.             }
  57.             rs.close();
  58.             
  59.         } catch (Exception e) {
  60.             result = false;
  61.             
  62.         } finally {
  63.             delete(stmt);
  64.             
  65.             if (result) {
  66.                 System.out.println("○");
  67.             } else {
  68.                 System.out.println("×");
  69.             }
  70.         }
  71.         
  72.     }
  73.     
  74.     private static void delete(Statement stmt) {
  75.         try {
  76.             stmt.execute("DELETE FROM t");
  77.         } catch (Exception e){ }
  78.     }
  79. }



※blogに貼り付けられないので、「叱」の印刷標準字体は「■」で表記しています。


Javaのバージョンは1.6。
JDBCドライバは、JayBird 2.2.0を使用しました。

データベースはWindows XPにインストールしています。





Firebird 1.5.6



103_02.png

UTF8指定だと、半角数字が10文字以上入ります。
char(10)指定に対し、30文字入りました。






Firebird 2.0.7



103_03.png

SJIS_0208指定で、1.5.6系のときは機種依存文字が登録できていたのですが、
2.0.7になるとエラーになります。

「叱」の印刷標準字体は1.5.6系ではUNICODE_FSS指定で登録できていましたが、登録出来なくなるようです。

UTF8指定での半角文字の扱いが変更され、ちゃんと10文字しか登録できない模様。





Firebird 2.1.5/2.5.1



Firebird 2.1.5と2.5.1は同じ結果になりました。

103_04.png


UNICODE_FSS指定で、「叱」の印刷標準字体が登録できるようになっています。
関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ