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

 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 句 を使用するときのソート結果に影響を与える場合があります。 マルチリンガルデータベースを構成するときには非常に重要ですが、あまり日本では 用が無いでしょうかね?

Character setID1文字の最大サイズ最小サイズCollation orders
ASCII21 byte1 byteASCII
BIG_5562 bytes1 byteBIG_5
CYRL501 byte1 byteCYRL
DB_RUS
PDOX_CYRL
DOS437101 byte1 byteDOS437
DB_DEU437
DB_ESP437
DB_FIN437
DB_FRA437
DB_ITA437
DB_NLD437
DB_SVE437
DB_UK437
DB_US437
PDOX_ASCII
PDOX_INTL
PDOX_SWEDFIN
DOS850111 byte1 byteDOS850
DB_DEU850
DB_ESP850
DB_FRA850
DB_FRC850
DB_ITA850
DB_NLD850
DB_PTB850
DB_SVE850
DB_UK850
DB_US850
DOS852451 byte1 byteDOS852
DB_CSY
DB_PLK
DB_SLO
PDOX_CSY
PDOX_HUN
PDOX_PLK
PDOX_SLO
DOS857461 byte1 byteDOS857
DB_TRK
DOS860131 byte1 byteDOS860
DB_PTG860
DOS861471 byte1 byteDOS861
PDOX_ISL
DOS863141 byte1 byteDOS863
DB_FRC863
DOS865121 byte1 byteDOS865
DB_DAN865
DB_NOR865
PDOX_NORDAN4
EUCJ_020862 bytes1 byteEUCJ_0208
GB_2312572 bytes1 byteGB_2312
ISO8859_1211 byte1 byteISO8859_1
DA_DA
DE_DE
DU_NL
EN_UK
EN_US
ES_ES
FI_FI
FR_CA
FR_FR
IS_IS
IT_IT
NO_NO
PT_PT
SV_SV
KSC_5601442 bytes1 byteKSC_5601
KSC_DICTIONARY
NEXT191 byte1 byteNEXT
NXT_DEU
NXT_FRA
NXT_ITA
NXT_US
NONE01 byte1 byteNONE
OCTETS11 byte1 byteOCTETS
SJIS_020852 bytes1 byteSJIS_0208
UNICODE_FSS33 bytes1 byteUNICODE_FSS
WIN1250511 byte1 byteWIN1250
PXW_CSY
PXW_HUNDC
PXW_PLK
PXW_SLO
WIN1251521 byte1 byteWIN1251
PXW_CYRL
WIN1252531 byte1 byteWIN1252
PXW_INTL
PXW_INTL850
PXW_NORDAN4
PXW_SPAN
PXW_SWEDFIN
WIN1253541 byte1 byteWIN1253
PXW_GREEK
WIN1254551 byte1 byteWIN1254
PXW_TURK

※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などでのソートの指定も出来ません。

ID型名サイズ説明SQL-92(99)
との互換性
16BIGINT64bit符号付64bit整数。Dialect3/FB1.5以降で使用可能99
261BLOB可変長任意のデータを格納できる。サブタイプ指定がある。最大サイズはページサイズに依存。×
14CHAR(n)n文字(固定長)1〜32767バイト
・キャラクタセットによらず32K以内必須
別名:CHARACTER
12DATE64bit日付 (100/01/01〜32768/02/29)
27DECIMAL(p, s)16/32/64bit数値。p=有効桁数(1〜18),s=小数点以下(0〜18)
27DOUBLE PRECISION64bitIEEE倍精度実数。有効桁15。2.225e-308〜1.797e308
10FLOAT32bitIEEE単精度実数・有効桁7。1.175e-38〜3.402e38
8INTEGER32bit符号付32ビット整数
27NUMERIC(p,s)16/32/64bitDECIMALと同じ
7SMALLINT16bit符号付16ビット整数(-32768〜32767)
13TIME64bit時刻 (00:00〜23:59.9999)
35TIMESTAMP64bit日付と時刻 (100/01/01〜32768/02/29)
37VARCHAR(n)n文字1〜32765バイト
・キャラクタセットによらず32K以内必須
別名1:CHAR VARYING
別名2:CHARACTER VARYING


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

サブタイプ値説明
-1ユーザー定義
0不明タイプ
1テキスト
2バイナリー
3アクセスコントロールリスト
4(予約)
5エンコードされたメタデータ
6異常終了した多重データ・ベース処理の記述

 サブタイプの指定は 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外部キーで指定された列を参照できる