文字列データ型のサマリーについて説明します。文字列型のプロパティーおよびストレージ要件の追加情報については、セクション11.4「文字列型」およびセクション11.7「データ型のストレージ要件」を参照してください。
MySQL は、文字列カラムを CREATE TABLE
または ALTER TABLE
ステートメントで与えられている型とは異なる型に変更することがあります。セクション13.1.17.3「暗黙のカラム指定の変更」を参照してください。
MySQL は、文字カラム定義の長さ指定を文字単位で解釈します。これは、CHAR
、VARCHAR
、および TEXT
型に適応されます。
多くの文字列データ型のカラム定義には、カラムの文字セットまたは照合順序を指定する属性を含めることができます。これらの属性は 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 );
このテーブル定義は、
utf8
の文字セットとその文字セットのデフォルト照合順序を持つc1
という名前のカラムと、latin1
の文字セットと大文字と小文字を区別する照合順序を持つc2
という名前のカラムを作成します。CHARACTER SET
属性またはCOLLATE
属性、あるいはその両方がない場合に、文字セットや照合順序を割り当てるためのルールは、セクション10.1.3.4「カラム文字セットおよび照合順序」で説明しています。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 );
ASCII
属性はCHARACTER SET latin1
の短縮形です。UNICODE
属性はCHARACTER SET ucs2
の短縮形です。BINARY
属性は、カラム文字セットのバイナリ照合順序を指定する短縮形です。この場合、ソートと比較は数字の値に基づきます。
文字カラムのソートと比較は、カラムに割り当てられた文字セットに基づきます。CHAR
、VARCHAR
、TEXT
、ENUM
、および SET
データ型では、辞書順ではなくベースとなる文字コード値をソートおよび比較で使用できるように、バイナリ照合順序または BINARY
属性を持つカラムを宣言できます。
セクション10.1「文字セットのサポート」では、MySQL の文字セットの使用に関する追加情報が記述されています。
-
[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 4.1 以降では、この事前に定義された文字セットとしてutf8
を使用します。セクション10.1.3.6「各国文字セット」を参照してください。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 文字になるように宣言できます。セクションD.10.4「テーブルカラム数と行サイズの制限」を参照してください。MySQL は、
VARCHAR
値を 1 バイトまたは 2 バイト長のプリフィクスが付いたデータとして格納します。長さプリフィクスは、値に含まれるバイト数を示します。VARCHAR
カラムは、格納できる値が 255 バイト以下の場合は 1 バイト長のプリフィクスを使用し、255 バイトより大きい場合は 2 バイト長のプリフィクスを使用します。注記MySQL 5.6 は、標準 SQL 仕様に従い、
VARCHAR
値から末尾のスペースを削除しません。VARCHAR
はCHARACTER VARYING
の短縮形です。NATIONAL VARCHAR
は、VARCHAR
カラムが事前定義された文字セットを使用する必要があることを定義するための標準 SQL の方法です。MySQL 4.1 以降では、この事前に定義された文字セットとしてutf8
を使用します。セクション10.1.3.6「各国文字セット」を参照してください。NVARCHAR
はNATIONAL VARCHAR
の短縮形です。 -
BINARY
型はCHAR
型と似ていますが、非バイナリ文字列ではなく、バイナリバイト文字列を格納します。M
はカラムの長さをバイト数で表します。 -
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 個の個別の要素を含めることができます。(実用的な限度は 3000 個までです。)テーブルには、グループと見なされるENUM
およびSET
カラムの中の一意の要素リスト定義を、255 個以下を含めることができます。これらの制限の詳細は、セクションD.10.5「.frm ファイル構造により課せられる制限」を参照してください。 -
SET('
value1
','value2
',...) [CHARACTER SETcharset_name
] [COLLATEcollation_name
]セットです。ゼロ個以上の値を持つことができる文字列オブジェクトであり、そのそれぞれの値は、
'
、value1
''
、value2
'...
値のリストから選択する必要があります。SET
値は整数として内部で表されます。SET
カラムには最大 64 個の個別のメンバーを含めることができます。テーブルには、グループと見なされるENUM
およびSET
カラムの中の一意の要素リスト定義を、255 個以下を含めることができます。この制限の詳細は、セクションD.10.5「.frm ファイル構造により課せられる制限」を参照してください。