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

#contents

**キャラクタセットとCollation orders [#j70dd14d]
 データベースの作成時やテーブルの作成時などに指定できるキャラクタセットと
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 set|ID|1文字の最大サイズ|最小サイズ|Collation orders|h
|ASCII|2|1 byte|1 byte|ASCII|
|BIG_5|56|2 bytes|1 byte|BIG_5|
|CYRL|50|1 byte|1 byte|CYRL|
|~|~|~|~|DB_RUS|
|~|~|~|~|PDOX_CYRL|
|DOS437|10|1 byte|1 byte|DOS437|
|~|~|~|~|DB_DEU437|
|~|~|~|~|DB_ESP437|
|~|~|~|~|DB_FIN437|
|~|~|~|~|DB_FRA437|
|~|~|~|~|DB_ITA437|
|~|~|~|~|DB_NLD437|
|~|~|~|~|DB_SVE437|
|~|~|~|~|DB_UK437|
|~|~|~|~|DB_US437|
|~|~|~|~|PDOX_ASCII|
|~|~|~|~|PDOX_INTL|
|~|~|~|~|PDOX_SWEDFIN|
|DOS850|11|1 byte|1 byte|DOS850|
|~|~|~|~|DB_DEU850|
|~|~|~|~|DB_ESP850|
|~|~|~|~|DB_FRA850|
|~|~|~|~|DB_FRC850|
|~|~|~|~|DB_ITA850|
|~|~|~|~|DB_NLD850|
|~|~|~|~|DB_PTB850|
|~|~|~|~|DB_SVE850|
|~|~|~|~|DB_UK850|
|~|~|~|~|DB_US850|
|DOS852|45|1 byte|1 byte|DOS852|
|~|~|~|~|DB_CSY|
|~|~|~|~|DB_PLK|
|~|~|~|~|DB_SLO|
|~|~|~|~|PDOX_CSY|
|~|~|~|~|PDOX_HUN|
|~|~|~|~|PDOX_PLK|
|~|~|~|~|PDOX_SLO|
|DOS857|46|1 byte|1 byte|DOS857|
|~|~|~|~|DB_TRK|
|DOS860|13|1 byte|1 byte|DOS860|
|~|~|~|~|DB_PTG860|
|DOS861|47|1 byte|1 byte|DOS861|
|~|~|~|~|PDOX_ISL|
|DOS863|14|1 byte|1 byte|DOS863|
|~|~|~|~|DB_FRC863|
|DOS865|12|1 byte|1 byte|DOS865|
|~|~|~|~|DB_DAN865|
|~|~|~|~|DB_NOR865|
|~|~|~|~|PDOX_NORDAN4|
|EUCJ_0208|6|2 bytes|1 byte|EUCJ_0208|
|GB_2312|57|2 bytes|1 byte|GB_2312|
|ISO8859_1|21|1 byte|1 byte|ISO8859_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_5601|44|2 bytes|1 byte|KSC_5601|
|~|~|~|~|KSC_DICTIONARY|
|NEXT|19|1 byte|1 byte|NEXT|
|~|~|~|~|NXT_DEU|
|~|~|~|~|NXT_FRA|
|~|~|~|~|NXT_ITA|
|~|~|~|~|NXT_US|
|NONE|0|1 byte|1 byte|NONE|
|OCTETS|1|1 byte|1 byte|OCTETS|
|SJIS_0208|5|2 bytes|1 byte|SJIS_0208|
|UNICODE_FSS|3|3 bytes|1 byte|UNICODE_FSS|
|WIN1250|51|1 byte|1 byte|WIN1250|
|~|~|~|~|PXW_CSY|
|~|~|~|~|PXW_HUNDC|
|~|~|~|~|PXW_PLK|
|~|~|~|~|PXW_SLO|
|WIN1251|52|1 byte|1 byte|WIN1251|
|~|~|~|~|PXW_CYRL|
|WIN1252|53|1 byte|1 byte|WIN1252|
|~|~|~|~|PXW_INTL|
|~|~|~|~|PXW_INTL850|
|~|~|~|~|PXW_NORDAN4|
|~|~|~|~|PXW_SPAN|
|~|~|~|~|PXW_SWEDFIN|
|WIN1253|54|1 byte|1 byte|WIN1253|
|~|~|~|~|PXW_GREEK|
|WIN1254|55|1 byte|1 byte|WIN1254|
|~|~|~|~|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;


**データ型 [#z5afd1e0]
 Firebirdで、テーブルの作成時などに指定する型の一覧です。BIGINTは Firebird1.5
以上のバージョンで、データベースに Dialect3 を設定した場合にのみ使用できます。~
&br;
''※1 キャラクタセットの設定によらず、CHARは32767バイト、VARCHARは32765バイトを超えた文字は格納出来ません。そのため、設定可能な最大長はキャラクタセットに依存しますので注意が必要です。''
それ以上の長さの文字列を取り扱いたい場合は、BLOB の SUB_TYPE 1(文字列用BLOB)を
使用してください。~
※2 BLOBとCHARの大きな違いは、記憶装置に格納されるときの処理です。管理方法も違いますが、CHAR/VARCHARの場合は圧縮されて格納されるのに対して、BLOBではそのままの形で格納します。またSELECTなどでのソートの指定も出来ません。~

|ID|型名|サイズ|説明|SQL-92(99)&br;との互換性|h
|16|BIGINT|64bit|符号付64bit整数。Dialect3/FB1.5以降で使用可能|99|
|261|BLOB|可変長|任意のデータを格納できる。サブタイプ指定がある。最大サイズはページサイズに依存。|×|
|14|CHAR(n)|n文字(固定長)|1〜32767バイト&br;・キャラクタセットによらず32K以内必須&br;別名:CHARACTER|○|
|12|DATE|64bit|日付 (100/01/01〜32768/02/29)|○|
|27|DECIMAL(p, s)|16/32/64bit|数値。p=有効桁数(1〜18),s=小数点以下(0〜18)|○|
|27|DOUBLE PRECISION|64bit|IEEE倍精度実数。有効桁15。2.225e-308〜1.797e308|○|
|10|FLOAT|32bit|IEEE単精度実数・有効桁7。1.175e-38〜3.402e38|○|
|8|INTEGER|32bit|符号付32ビット整数|○|
|27|NUMERIC(p,s)|16/32/64bit|DECIMALと同じ|○|
|7|SMALLINT|16bit|符号付16ビット整数(-32768〜32767)|○|
|13|TIME|64bit|時刻 (00:00〜23:59.9999)|○|
|35|TIMESTAMP|64bit|日付と時刻 (100/01/01〜32768/02/29)|○|
|37|VARCHAR(n)|n文字|1〜32765バイト&br;・キャラクタセットによらず32K以内必須&br;別名1:CHAR VARYING&br;別名2:CHARACTER VARYING|○|
&br;
※BLOBのサブタイプに対する補足
|サブタイプ値|説明|h
|-1|ユーザー定義|
|0|不明タイプ|
|1|テキスト|
|2|バイナリー|
|3|アクセスコントロールリスト|
|4|(予約)|
|5|エンコードされたメタデータ|
|6|異常終了した多重データ・ベース処理の記述|
 サブタイプの指定は BLOB と同時に指定します。例えば次のような形です。
 CREATE TABLE TEST (BLOB1 BLOB,BLOB2 BLOB SUB_TYPE 1);


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

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