MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  文字列データ型の構文

11.3.1 文字列データ型の構文

文字列データ型は、CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM および SET です。

MySQL は、文字列カラムを CREATE TABLE または ALTER TABLE ステートメントで与えられている型とは異なる型に変更することがあります。 セクション13.1.20.7「暗黙のカラム指定の変更」を参照してください。

文字列カラム (CHARVARCHAR および TEXT 型) の定義では、MySQL は長さの指定を文字単位で解釈します。 バイナリ文字列カラム (BINARYVARBINARY および BLOB 型) の定義では、MySQL は長さの指定をバイト単位で解釈します。

文字列データ型 CHARVARCHARTEXT 型、ENUMSET および任意のシノニムのカラム定義では、カラムの文字セットおよび照合順序を指定できます:

  • 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 SETCOLLATE 属性のいずれかまたは両方が欠落している場合に文字セットと照合順序を割り当てるためのルールは、セクション10.3.5「カラム文字セットおよび照合順序」 で説明されています。

    CHARSETCHARACTER SET のシノニムです。

  • 文字列データ型に CHARACTER SET binary 属性を指定すると、対応するバイナリ文字列データ型としてカラムが作成されます: CHARBINARYVARCHARVARBINARYTEXTBLOB になります。 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 SET charset_name] [COLLATE collation_name]

    格納時に必ず、指定された長さになるように右側がスペースで埋められる固定長文字列です。 M はカラムの長さを文字数で表します。 M の範囲は 0 から 255 です。 M を省略すると、長さは 1 になります。

    注記

    PAD_CHAR_TO_FULL_LENGTH SQL モードが有効になっていないかぎり、CHAR 値が取り出されるときに末尾のスペースは削除されます。

    CHARCHARACTER の短縮形です。 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 SET charset_name] [COLLATE collation_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 値の末尾の空白は削除されません。

    VARCHARCHARACTER VARYING の短縮形です。 NATIONAL VARCHAR は、VARCHAR カラムが事前定義された文字セットを使用する必要があることを定義するための標準 SQL の方法です。 MySQL では、この事前定義済文字セットとして utf8 を使用します。セクション10.3.7「各国語文字セット」NVARCHARNATIONAL VARCHAR の短縮形です。

  • BINARY[(M)]

    BINARY 型は CHAR 型と似ていますが、非バイナリ文字列ではなく、バイナリバイト文字列を格納します。 オプションの長さの M は、カラムの長さをバイト単位で表します。 省略すると、M はデフォルトで 1 になります。

  • VARBINARY(M)

    VARBINARY 型は VARCHAR 型と似ていますが、非バイナリ文字列ではなく、バイナリバイト文字列を格納します。 M はカラムの最大の長さをバイト数で表します。

  • TINYBLOB

    最大長が 255 (28 − 1) バイトの BLOB カラム。 各 TINYBLOB 値は、値のバイト数を示す 1 バイト長のプリフィクスを使用して格納されます。

  • TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長が 255 (28 − 1) 文字の TEXT カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。 各 TINYTEXT 値は、値のバイト数を示す 1 バイト長のプリフィクスを使用して格納されます。

  • BLOB[(M)]

    最大長が 65,535 (216 − 1) バイトの BLOB カラム。 各 BLOB 値は、値のバイト数を示す 2 バイト長のプリフィクスを使用して格納されます。

    この型には、オプションの長さ M を指定できます。 これが行われた場合、MySQL は M バイトの長さの値を保持するのに十分な最小の BLOB 型としてカラムを作成します。

  • TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長が 65,535 (216 − 1) 文字の TEXT カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。 各 TEXT 値は、値のバイト数を示す 2 バイト長のプリフィクスを使用して格納されます。

    この型には、オプションの長さ M を指定できます。 これが行われた場合、MySQL は M 文字の長さの値を保持するのに十分な最小 TEXT 型としてカラムを作成します。

  • MEDIUMBLOB

    最大長が 16,777,215 (224 − 1) バイトの BLOB カラム。 各 MEDIUMBLOB 値は、値のバイト数を示す 3 バイト長のプリフィクスを使用して格納されます。

  • MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長が 16,777,215 (224 − 1) 文字の TEXT カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。 各 MEDIUMTEXT 値は、値のバイト数を示す 3 バイト長のプリフィクスを使用して格納されます。

  • LONGBLOB

    最大長が 4,294,967,295 または 4G バイト (232 − 1) バイトの BLOB カラム。 LONGBLOB カラムの有効な最大長は、クライアント/サーバープロトコルと使用可能なメモリー内の構成済み最大パケットサイズにより決まります。 各 LONGBLOB 値は、値のバイト数を示す 4 バイト長のプリフィクスを使用して格納されます。

  • LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]

    最大長が 4,294,967,295 または 4G バイト (232 − 1) 文字の TEXT カラム。 値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。 LONGTEXT カラムの有効な最大長もまた、クライアント/サーバープロトコルと使用可能メモリー内の構成済みの最大パケットサイズにより決まります。 各 LONGTEXT 値は、値のバイト数を示す 4 バイト長のプリフィクスを使用して格納されます。

  • ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

    列挙です。 'value1''value2'... の値、NULL、または特殊な '' エラー値のリストから選択された値を 1 つだけを持つことができる文字列オブジェクトです。 ENUM 値は、内部では整数として表されます。

    ENUM カラムには、最大 65,535 個の個別の要素を含めることができます。

    個々の ENUM 要素でサポートされる最大長は、M <= 255 および (M x w) <= 1020 です。M は要素リテラルの長さ、w は文字セットの最大長文字に必要なバイト数です。

  • SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]

    セットです。 ゼロ個以上の値を持つことができる文字列オブジェクトであり、そのそれぞれの値は、'value1''value2'... 値のリストから選択する必要があります。SET 値は整数として内部で表されます。

    SET カラムには最大 64 個の個別のメンバーを含めることができます。

    個々の SET 要素でサポートされる最大長は、M <= 255 および (M x w) <= 1020 です。M は要素リテラルの長さ、w は文字セットの最大長文字に必要なバイト数です。


関連キーワード:  カラム, バイト, 文字, 最大, セット, CHARACTER, VARCHAR, TEXT, 定義, BINARY