このページは機械翻訳したものです。
文字列データ型は、CHAR
, VARCHAR
, BINARY
, VARBINARY
, BLOB
, TEXT
, ENUM
および SET
です。
MySQL は、文字列カラムを CREATE TABLE
または ALTER TABLE
ステートメントで与えられている型とは異なる型に変更することがあります。 セクション13.1.20.7「暗黙のカラム指定の変更」を参照してください。
文字列カラム (CHAR
、VARCHAR
および TEXT
型) の定義では、MySQL は長さの指定を文字単位で解釈します。 バイナリ文字列カラム (BINARY
、VARBINARY
および BLOB
型) の定義では、MySQL は長さの指定をバイト単位で解釈します。
文字列データ型 CHAR
、VARCHAR
、TEXT
型、ENUM
、SET
および任意のシノニムのカラム定義では、カラムの文字セットおよび照合順序を指定できます:
-
CHARACTER SET
では、文字セットを指定します。 必要に応じて、文字セットの照合順序をCOLLATE
属性とともに他の属性とともに指定できます。 例:CREATE TABLE t ( c1 VARCHAR(20) CHARACTER SET utf8, c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs );
このテーブル定義では、
c1
という名前のカラムを作成します。このカラムには、その文字セットのデフォルト照合順序を持つutf8
の文字セットと、latin1
という文字セットおよび大/小文字を区別する (_cs
) 照合順序を持つc2
という名前のカラムがあります。CHARACTER SET
とCOLLATE
属性のいずれかまたは両方が欠落している場合に文字セットと照合順序を割り当てるためのルールは、セクション10.3.5「カラム文字セットおよび照合順序」 で説明されています。CHARSET
はCHARACTER SET
のシノニムです。 -
文字列データ型に
CHARACTER SET binary
属性を指定すると、対応するバイナリ文字列データ型としてカラムが作成されます:CHAR
はBINARY
、VARCHAR
はVARBINARY
、TEXT
はBLOB
になります。ENUM
およびSET
データ型では、これは行われず、宣言されたとおりに作成されます。 この定義を使用して、テーブルを指定したとします。CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET binary, c2 TEXT CHARACTER SET binary, c3 ENUM('a','b','c') CHARACTER SET binary );
結果のテーブルには、この定義が含まれています。
CREATE TABLE t ( c1 VARBINARY(10), c2 BLOB, c3 ENUM('a','b','c') CHARACTER SET binary );
-
BINARY
属性は、カラム文字セット (またはカラム文字セットが指定されていない場合はテーブルのデフォルト文字セット) のバイナリ (_bin
) 照合順序を指定するための短縮形である非標準の MySQL 拡張機能です。 この場合、比較およびソートは数値文字コード値に基づきます。 この定義を使用して、テーブルを指定したとします。CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 BINARY, c2 TEXT BINARY ) CHARACTER SET utf8mb4;
結果のテーブルには、この定義が含まれています。
CREATE TABLE t ( c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin, c2 TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ) CHARACTER SET utf8mb4;
MySQL 8.0 では、
utf8mb4
文字セットに複数の_bin
照合順序があるため、BINARY
属性のこの非標準の使用はあいまいです。 MySQL 8.0.17 では、BINARY
属性は非推奨であり、将来のバージョンの MySQL でサポートが削除される予定です。 かわりに、明示的な_bin
照合を使用するようにアプリケーションを調整する必要があります。BINARY
を使用してデータ型または文字セットを指定する方法は変わりません。 ASCII
属性はCHARACTER SET latin1
の短縮形です。UNICODE
属性はCHARACTER SET ucs2
の短縮形です。
文字カラムの比較およびソートは、カラムに割り当てられた照合に基づきます。 CHAR
, VARCHAR
, TEXT
, ENUM
および SET
データ型の場合は、バイナリ (_bin
) 照合順序または BINARY
属性を使用してカラムを宣言し、比較およびソートで字句順序ではなく基礎となる文字コード値を使用できます。
MySQL での文字セットの使用の詳細は、第10章「文字セット、照合順序、Unicode」 を参照してください。
-
[NATIONAL] CHAR[(
M
)] [CHARACTER SETcharset_name
] [COLLATEcollation_name
]格納時に必ず、指定された長さになるように右側がスペースで埋められる固定長文字列です。
M
はカラムの長さを文字数で表します。M
の範囲は 0 から 255 です。M
を省略すると、長さは 1 になります。注記PAD_CHAR_TO_FULL_LENGTH
SQL モードが有効になっていないかぎり、CHAR
値が取り出されるときに末尾のスペースは削除されます。CHAR
はCHARACTER
の短縮形です。NATIONAL CHAR
(またはそれと同等の短縮形であるNCHAR
) は、CHAR
カラムが事前に定義された文字セットを使用する必要があることを定義する標準 SQL の方法です。 MySQL では、この事前定義済文字セットとしてutf8
を使用します。セクション10.3.7「各国語文字セット」。CHAR BYTE
データ型はBINARY
データ型のエイリアスです。 これは互換性機能です。MySQL では、
CHAR(0)
の型のカラムを作成できます。 これは主に、カラムの存在に依存するが、実際にはその値を使用しない古いアプリケーションに準拠する必要がある場合に役立ちます。CHAR(0)
は、2 つの値しか取れないカラムが必要な場合にも非常に便利です。CHAR(0) NULL
として定義されたカラムは 1 ビットだけを占め、NULL
と''
(空の文字列) 値だけを取ることができます。 -
[NATIONAL] VARCHAR(
M
) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]可変長文字列です。
M
はカラムの最大長を文字数で表します。M
の範囲は 0 から 65,535 です。VARCHAR
の有効な最大長は、最大行サイズ (65,535 バイト、すべてのカラムで共有されます) と使用される文字セットによって決まります。 たとえば、utf8
の文字は 1 文字につき最大 3 バイトを必要とする場合があるため、utf8
の文字セットを使用するVARCHAR
カラムは、最大 21,844 文字になるように宣言できます。 セクション8.4.7「テーブルカラム数と行サイズの制限」を参照してください。MySQL は、
VARCHAR
値を 1 バイトまたは 2 バイト長のプリフィクスが付いたデータとして格納します。 長さプリフィクスは、値に含まれるバイト数を示します。VARCHAR
カラムは、格納できる値が 255 バイト以下の場合は 1 バイト長のプリフィクスを使用し、255 バイトより大きい場合は 2 バイト長のプリフィクスを使用します。注記MySQL は標準の SQL 仕様に準拠しており、
VARCHAR
値の末尾の空白は削除されません。VARCHAR
はCHARACTER VARYING
の短縮形です。NATIONAL VARCHAR
は、VARCHAR
カラムが事前定義された文字セットを使用する必要があることを定義するための標準 SQL の方法です。 MySQL では、この事前定義済文字セットとしてutf8
を使用します。セクション10.3.7「各国語文字セット」。NVARCHAR
はNATIONAL VARCHAR
の短縮形です。 -
BINARY
型はCHAR
型と似ていますが、非バイナリ文字列ではなく、バイナリバイト文字列を格納します。 オプションの長さのM
は、カラムの長さをバイト単位で表します。 省略すると、M
はデフォルトで 1 になります。 -
VARBINARY
型はVARCHAR
型と似ていますが、非バイナリ文字列ではなく、バイナリバイト文字列を格納します。M
はカラムの最大の長さをバイト数で表します。 -
最大長が 255 (28 − 1) バイトの
BLOB
カラム。 各TINYBLOB
値は、値のバイト数を示す 1 バイト長のプリフィクスを使用して格納されます。 -
TINYTEXT [CHARACTER SET
charset_name
] [COLLATEcollation_name
]最大長が 255 (28 − 1) 文字の
TEXT
カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。 各TINYTEXT
値は、値のバイト数を示す 1 バイト長のプリフィクスを使用して格納されます。 -
最大長が 65,535 (216 − 1) バイトの
BLOB
カラム。 各BLOB
値は、値のバイト数を示す 2 バイト長のプリフィクスを使用して格納されます。この型には、オプションの長さ
M
を指定できます。 これが行われた場合、MySQL はM
バイトの長さの値を保持するのに十分な最小のBLOB
型としてカラムを作成します。 -
TEXT[(
M
)] [CHARACTER SETcharset_name
] [COLLATEcollation_name
]最大長が 65,535 (216 − 1) 文字の
TEXT
カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。 各TEXT
値は、値のバイト数を示す 2 バイト長のプリフィクスを使用して格納されます。この型には、オプションの長さ
M
を指定できます。 これが行われた場合、MySQL はM
文字の長さの値を保持するのに十分な最小TEXT
型としてカラムを作成します。 -
最大長が 16,777,215 (224 − 1) バイトの
BLOB
カラム。 各MEDIUMBLOB
値は、値のバイト数を示す 3 バイト長のプリフィクスを使用して格納されます。 -
MEDIUMTEXT [CHARACTER SET
charset_name
] [COLLATEcollation_name
]最大長が 16,777,215 (224 − 1) 文字の
TEXT
カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。 各MEDIUMTEXT
値は、値のバイト数を示す 3 バイト長のプリフィクスを使用して格納されます。 -
最大長が 4,294,967,295 または 4G バイト (232 − 1) バイトの
BLOB
カラム。LONGBLOB
カラムの有効な最大長は、クライアント/サーバープロトコルと使用可能なメモリー内の構成済み最大パケットサイズにより決まります。 各LONGBLOB
値は、値のバイト数を示す 4 バイト長のプリフィクスを使用して格納されます。 -
LONGTEXT [CHARACTER SET
charset_name
] [COLLATEcollation_name
]最大長が 4,294,967,295 または 4G バイト (232 − 1) 文字の
TEXT
カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。LONGTEXT
カラムの有効な最大長もまた、クライアント/サーバープロトコルと使用可能メモリー内の構成済みの最大パケットサイズにより決まります。 各LONGTEXT
値は、値のバイト数を示す 4 バイト長のプリフィクスを使用して格納されます。 -
ENUM('
value1
','value2
',...) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]列挙です。
'
、value1
''
、value2
'...
の値、NULL
、または特殊な''
エラー値のリストから選択された値を 1 つだけを持つことができる文字列オブジェクトです。ENUM
値は、内部では整数として表されます。ENUM
カラムには、最大 65,535 個の個別の要素を含めることができます。個々の
ENUM
要素でサポートされる最大長は、M
<= 255 および (M
xw
) <= 1020 です。M
は要素リテラルの長さ、w
は文字セットの最大長文字に必要なバイト数です。 -
SET('
value1
','value2
',...) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]セットです。 ゼロ個以上の値を持つことができる文字列オブジェクトであり、そのそれぞれの値は、
'
、value1
''
、value2
'...
値のリストから選択する必要があります。SET
値は整数として内部で表されます。SET
カラムには最大 64 個の個別のメンバーを含めることができます。個々の
SET
要素でサポートされる最大長は、M
<= 255 および (M
xw
) <= 1020 です。M
は要素リテラルの長さ、w
は文字セットの最大長文字に必要なバイト数です。