文字列型
TiDB は、 CHAR
、 VARCHAR
、 BINARY
、 VARBINARY
、 BLOB
、 TEXT
、 ENUM
、 SET
を含むすべての MySQL 文字列タイプをサポートします。詳細については、 MySQL の文字列型参照してください。
サポートされているタイプ
CHAR
型
CHAR
は固定長の文字列です。 M は列の長さを文字数 (バイト数ではなく) で表します。 M の範囲は 0 ~ 255 です。タイプVARCHAR
とは異なり、データがCHAR
列に挿入される場合、末尾のスペースは切り捨てられます。
[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
VARCHAR
型
VARCHAR
は可変長の文字列です。 M は列の最大長を文字数 (バイト数ではなく) で表します。 VARCHAR
の最大サイズは 65,535 バイトを超えることはできません。行の最大長と使用されている文字セットによってVARCHAR
さが決まります。
1 つの文字が占めるスペースは、文字セットによって異なる場合があります。次の表は、1 つの文字によって消費されるバイト数と、各文字セットのVARCHAR
列の長さの範囲を示しています。
キャラクターセット | 1 文字あたりのバイト数 | 最大VARCHAR カラム長の範囲 |
---|---|---|
アスキー | 1 | (0, 65535] |
ラテン語1 | 1 | (0, 65535] |
バイナリ | 1 | (0, 65535] |
utf8 | 3 | (0, 21845] |
utf8mb4 | 4 | (0, 16383] |
[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
TEXT
タイプ
TEXT
は可変長の文字列です。列の最大長は 65,535 バイトです。オプションの M 引数は文字単位であり、 TEXT
列の最も適合するタイプを自動的に選択するために使用されます。たとえばTEXT(60)
、最大 255 バイトを保持できるTINYTEXT
データ型を生成します。これは、1 文字あたり最大 4 バイトの 60 文字の UTF-8 文字列に適合します (4×60=240)。 M 引数の使用はお勧めできません。
TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
TINYTEXT
型
TINYTEXT
タイプはTEXT
タイプと似ています。違いは、 TINYTEXT
の最大列長が 255 であることです。
TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
MEDIUMTEXT
型
MEDIUMTEXT
タイプはTEXT
タイプと似ています。違いは、 MEDIUMTEXT
の最大列長が 16,777,215 であることです。ただし、 txn-entry-size-limit
の制限により、TiDB の単一行の最大storageサイズはデフォルトで 6 MiB ですが、構成を変更することで 120 MiB まで増やすことができます。
MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
LONGTEXT
型
LONGTEXT
タイプはTEXT
タイプと似ています。違いは、 LONGTEXT
の最大列長が 4,294,967,295 であることです。ただし、 txn-entry-size-limit
の制限により、TiDB の単一行の最大storageサイズはデフォルトで 6 MiB ですが、構成を変更することで 120 MiB まで増やすことができます。
LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
BINARY
型
BINARY
タイプはCHAR
型と似ています。違いは、 BINARY
バイナリ バイト文字列を格納することです。
BINARY(M)
VARBINARY
型
VARBINARY
タイプはVARCHAR
型と似ています。違いは、 VARBINARY
バイナリ バイト文字列を格納することです。
VARBINARY(M)
BLOB
タイプ
BLOB
は大きなバイナリ ファイルです。 M は列の最大長をバイト単位で表し、範囲は 0 ~ 65,535 です。
BLOB[(M)]
TINYBLOB
型
TINYBLOB
タイプはBLOB
タイプと似ています。違いは、 TINYBLOB
の最大列長が 255 であることです。
TINYBLOB
MEDIUMBLOB
タイプ
MEDIUMBLOB
タイプはBLOB
タイプと似ています。違いは、 MEDIUMBLOB
の最大列長が 16,777,215 であることです。ただし、 txn-entry-size-limit
の制限により、TiDB の単一行の最大storageサイズはデフォルトで 6 MiB ですが、構成を変更することで 120 MiB まで増やすことができます。
MEDIUMBLOB
LONGBLOB
型
LONGBLOB
タイプはBLOB
タイプと似ています。違いは、 LONGBLOB
の最大列長が 4,294,967,295 であることです。ただし、 txn-entry-size-limit
の制限により、TiDB の単一行の最大storageサイズはデフォルトで 6 MiB ですが、構成を変更することで 120 MiB まで増やすことができます。
LONGBLOB
ENUM
タイプ
ENUM
は、テーブルの作成時に列仕様で明示的に列挙される許可された値のリストから選択された値を持つ文字列オブジェクトです。構文は次のとおりです。
ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
# For example:
ENUM('apple', 'orange', 'pear')
ENUM
データ型の値は数値として保存されます。各値は定義順序に従って数値に変換されます。前の例では、各文字列が数値にマップされます。
価値 | 番号 |
---|---|
ヌル | ヌル |
」 | 0 |
'りんご' | 1 |
'オレンジ' | 2 |
'梨' | 3 |
詳細については、 MySQL の ENUM 型を参照してください。
SET
タイプ
SET
は、0 個以上の値を持つことができる文字列オブジェクトであり、それぞれの値は、テーブルの作成時に指定された許可される値のリストから選択する必要があります。構文は次のとおりです。
SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
# For example:
SET('1', '2') NOT NULL
この例では、次のいずれかの値が有効です。
''
'1'
'2'
'1,2'
TiDB では、 SET
型の値は内部でInt64
に変換されます。各要素の存在は、0 または 1 のバイナリを使用して表されます。 SET('a','b','c','d')
として指定された列の場合、メンバーは次の 10 進値とバイナリ値を持ちます。
メンバー | 10 進数値 | バイナリ値 |
---|---|---|
「あ」 | 1 | 0001 |
「b」 | 2 | 0010 |
「c」 | 4 | 0100 |
「だ」 | 8 | 1000 |
この場合、要素が('a', 'c')
の場合、2 進数では0101
になります。
詳細については、 MySQL の SET タイプを参照してください。