文字列型
TiDB は、 CHAR 、 VARCHAR 、 BINARY 、 VARBINARY 、 BLOB 、 TEXT 、 ENUM 、 SETを含むすべての MySQL 文字列型をサポートしています。詳細については、 MySQL の文字列型を参照してください。
サポートされているタイプ
CHAR型
CHARは固定長文字列です。M は列の長さを文字数 (バイト数ではありません) で表します。M の範囲は 0 ~ 255 です。2 タイプとは異なり、 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 バイト (4×60=240) の 60 文字の UTF-8 文字列に適合します。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データ型の値は数値として保存されます。各値は定義順序に従って数値に変換されます。前の例では、各文字列が数値にマッピングされています。
| 価値 | 番号 |
|---|---|
| NULL | NULL |
| '' | 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 進値と 2 進値を持ちます。
| メンバー | 小数値 | バイナリ値 |
|---|---|---|
| 'あ' | 1 | 0001 |
| 'ブ' | 2 | 0010 |
| 'ハ' | 4 | 0100 |
| 'd' | 8 | 1000 |
この場合、 ('a', 'c')の要素は 2 進数では0101なります。
詳細についてはMySQLのSET型参照してください。