S-JIS[2023-10-09/2024-04-11]
|
TsurugiのSQLのデータ型は、TsubakuroではAtomType、IceaxeではTgDataTypeという列挙型で表す。
SQLのデータ型では桁数や精度(例:char(10)
)があるが、AtomTypeやTgDataTypeでは桁数や精度は持たない。
SQLデータ型 | リテラルの例 | TsubakuroのAtomType | IceaxeのTgDataType | |
---|---|---|---|---|
boolean |
true |
1.0.0-BETA1 | BOOLEAN |
BOOLEAN |
tinyint |
||||
smallint |
||||
int |
123 |
1.0.0-BETA1 | INT4 |
INT |
bigint |
123 |
1.0.0-BETA1 | INT8 |
LONG |
real |
123.4 |
1.0.0-BETA1 | FLOAT4 |
FLOAT |
double |
123.4 |
1.0.0-BETA1 | FLOAT8 |
DOUBLE |
decimal(p,s) |
DECIMAL |
DECIMAL |
||
char(n) |
'abc' |
1.0.0-BETA1 | CHARACTER |
STRING |
binary(n) |
OCTET |
BYTES |
||
BIT |
BITS |
|||
date |
DATE |
DATE |
||
time |
TIME_OF_DAY |
TIME |
||
timestamp |
TIME_POINT |
DATE_TIME |
||
interval |
DATETIME_INTERVAL |
|||
time with time zone |
TIME_OF_DAY_WITH_TIME_ZONE |
OFFSET_TIME |
||
timestamp with time zone |
TIME_POINT_WITH_TIME_ZONE |
OFFSET_DATE_TIME |
||
CLOB |
||||
BLOB |
||||
array |
||||
row |
Tsurugi 1.0.0時点ではまだ対応していないデータ型がある。
リテラルが実装されていないデータ型もあり、そのカラムにはTsurugi SQLコンソールのinsert文ではデータを入れられないが、
TsubakuroやIceaxeが対応しているデータ型なら、TsubakuroのプレースホルダーやIceaxeのバインド変数を使ったinsert文、あるいはembulk-output-tsurugidbで値を入れることが出来る。
Tsurugi 1.0.0-BETA1では、charやvarcharに指定する桁数は、文字数ではなくバイト数。
insertやupdateする際は、UTF-8に変換されて格納される。
Tsurugi 1.0.0-BETA1では、decimalを使ったテーブルは作成できるが、リテラルが実装されていない。
ただし、文字列からdecimalへのキャストは実装されているので、それで代用できる。
create table decimal_table (value decimal(15, 2));
×Tsurugi 1.0.0-BETA1ではエラーになる tgsql> insert into decimal_table values(123.4); VALUE_EVALUATION_EXCEPTION (SQL-02011: An error occurred in evaluating values. type mismatch: expected decimal(15, 2), value index is 7)
insert into decimal_table values(cast('123.4' as decimal(15, 2)));
Tsurugi 1.0.0-BETA4では、NaN=NaNがtrueになるよう変更された。[2024-04-11]
(それより前はJavaと同じく、NaN=NaNはfalseだった)
プライマリキーのデータ型がdoubleやfloatだった場合、NaNがNaNと一致しないとプライマリキーNaNのデータが複数入れることが出来てしまうため、一般的な言語の仕様とは違うが、NaN同士が等しいものとして扱う仕様にしたらしい。