sql >> データベース >  >> RDS >> Mysql

MySQLのvarchar(max)に相当しますか?

    varcharの最大長は、MySQLの最大行サイズである64KB(BLOBを除く)の影響を受けます:

    VARCHAR(65535)
    

    ただし、マルチバイト文字セットを使用する場合は、制限が低くなることに注意してください。

    VARCHAR(21844) CHARACTER SET utf8
    

    次にいくつかの例を示します。

    最大行サイズは65535ですが、varcharには、特定の文字列の長さをエンコードするための1バイトまたは2バイトも含まれています。したがって、テーブル内の唯一の列であっても、実際には最大行サイズのvarcharを宣言することはできません。

    mysql> CREATE TABLE foo ( v VARCHAR(65534) );
    ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
    

    しかし、長さを短くしようとすると、機能する最大の長さが見つかります:

    mysql> CREATE TABLE foo ( v VARCHAR(65532) );
    Query OK, 0 rows affected (0.01 sec)
    

    ここで、テーブルレベルでマルチバイト文字セットを使用しようとすると、各文字が複数バイトとしてカウントされることがわかります。 UTF8文字列は必ずしもではありません 文字列ごとに複数バイトを使用しますが、MySQLは、将来のすべての挿入を1バイト文字に制限するとは想定できません。

    mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
    ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead
    

    最後のエラーが私たちに伝えたことにもかかわらず、InnoDBはまだ21845の長さを好みません。

    mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
    ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
    

    21845 * 3 =65535と計算すると、これは完全に理にかなっていますが、とにかく機能しませんでした。 21844 * 3 =65532であるのに対し、これは機能します。

    mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
    Query OK, 0 rows affected (0.32 sec)
    


    1. SQL Server:5列にわたる動的ピボット

    2. SQL Server 2008 Management Studioでテキストまたはvarchar(MAX)列のコンテンツ全体を表示するにはどうすればよいですか?

    3. MariaDBで日付に月を追加する6つの方法

    4. PostgreSQLの特定のデータベースに権限を付与する