キャラクタセット・データ型・権限

 Firebird で使用できる、キャラクタセットやデータ型などの、使用に際して 基本的な情報をまとめました。採用・仕様検討の段階でも参考になると思います。

キャラクタセットとCollation orders

 データベースの作成時やテーブルの作成時などに指定できるキャラクタセットと COLLATEに指定できる値です。

 キャラクタセットを適切に設定しないと不都合が起きる場合もあります。 テーブルに格納可能な文字数にも影響しますので注意してください。 日本国内で通常に使用するのは、NONE(指定なし),OCTETS(バイトバイナリ), ASCII,SJIS_0208(シフトJIS),EUCJ_0208(EUC),UNICODE_FSS(Unicode utf-8か?) あたりでしょう。
 NONEの指定を行うと、キャラクタセットを指定した列やクライアント接続とデータ が上手く交換できなくなる場合もありますので NONE はよく考えて使ったほうが良い です。特に、isqlなどは起動時のデフォルトは NONE となっていますので、SQL発行 ツールでの設定には注意して下さい。(1.5.1以降では、トラブルと勘違いする人が 多いのかシフトJIS接続などとは強制的に交換できるようになったようですが。)
 バイナリを扱う場合は、わかりやすいようにOCTETSにしたほうがいいかもしれません。

 Collation orders (SQL上ではCOLLATE) は SELECT などで ORDER BY や GROUP BY 句 を使用するときのソート結果に影響を与える場合があります。 マルチリンガルデータベースを構成するときには非常に重要ですが、あまり日本では 用が無いでしょうかね?

※isql等を使用して、次のようなクエリを発行することにより、現在使用可能な キャラクタセットなどに関する情報をデータベースに問い合わせることも出来ます。

SELECT RDB$CHARACTER_SET_NAME, RDB$CHARACTER_SET_ID
FROM RDB$CHARACTER_SETS
ORDER BY RDB$CHARACTER_SET_NAME;
SELECT RDB$COLLATION_NAME, RDB$CHARACTER_SET_ID
FROM RDB$COLLATIONS
ORDER BY RDB$COLLATION_NAME;

データ型

 Firebirdで、テーブルの作成時などに指定する型の一覧です。BIGINTは Firebird1.5 以上のバージョンで、データベースに Dialect3 を設定した場合にのみ使用できます。

※1 キャラクタセットの設定によらず、CHARは32767バイト、VARCHARは32765バイトを超えた文字は格納出来ません。そのため、設定可能な最大長はキャラクタセットに依存しますので注意が必要です。 それ以上の長さの文字列を取り扱いたい場合は、BLOB の SUB_TYPE 1(文字列用BLOB)を 使用してください。
※2 BLOBとCHARの大きな違いは、記憶装置に格納されるときの処理です。管理方法も違いますが、CHAR/VARCHARの場合は圧縮されて格納されるのに対して、BLOBではそのままの形で格納します。またSELECTなどでのソートの指定も出来ません。


※BLOBのサブタイプに対する補足

 サブタイプの指定は BLOB と同時に指定します。例えば次のような形です。

CREATE TABLE TEST (BLOB1 BLOB,BLOB2 BLOB SUB_TYPE 1);

権限

 GRANT や REVOKE で指定出来る権限は、次のようになっています。

ALLSELECT, INSERT, UPDATE, DELETE, REFERENCES を指定した場合と等価
(※EXECUTEは含まれない)
SELECTテーブル又はビューに対して行を取得できる
INSERTテーブル又はビューに対して行を挿入できる
UPDATEテーブル又はビューに対して行を変更できる
DELETEテーブル又はビューに対して行を削除できる
EXECUTEストアドプロシージャを実行できる
REFERENCES外部キーで指定された列を参照できる