S-JIS[2023-10-09/2024-04-11]

Tsurugiデータ型

TsurugiSQLのデータ型のメモ。


概要

TsurugiのSQLのデータ型は、TsubakuroではAtomType、IceaxeではTgDataTypeという列挙型で表す。
SQLのデータ型では桁数や精度(例:char(10))があるが、AtomTypeやTgDataTypeでは桁数や精度は持たない。

SQLデータ型 リテラルの例 TsubakuroのAtomType IceaxeのTgDataType
boolean true
false
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)
varchar(n)
'abc' 1.0.0-BETA1 CHARACTER STRING
binary(n)
varbinary(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
ZONED_DATE_TIME
      CLOB  
      BLOB  
array        
row        

Tsurugi 1.0.0時点ではまだ対応していないデータ型がある。

リテラルが実装されていないデータ型もあり、そのカラムにはTsurugi SQLコンソールのinsert文ではデータを入れられないが、
TsubakuroIceaxeが対応しているデータ型なら、TsubakuroのプレースホルダーやIceaxeのバインド変数を使ったinsert文、あるいはembulk-output-tsurugidbで値を入れることが出来る。


char・varchar

Tsurugi 1.0.0-BETA1では、charやvarcharに指定する桁数は、文字数ではなくバイト数。
insertやupdateする際は、UTF-8に変換されて格納される。


decimal

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)));

double・float

Tsurugi 1.0.0-BETA4では、NaN=NaNがtrueになるよう変更された。[2024-04-11]
(それより前はJavaと同じく、NaN=NaNはfalseだった)

プライマリキーのデータ型がdoubleやfloatだった場合、NaNがNaNと一致しないとプライマリキーNaNのデータが複数入れることが出来てしまうため、一般的な言語の仕様とは違うが、NaN同士が等しいものとして扱う仕様にしたらしい。


Tsurugi SQLへ戻る / Tsurugiへ戻る / 技術メモへ戻る
メールの送信先:ひしだま