MySQLのvarcharフィールドの最大長を明確にする必要があります。
私はいつも最大長が255だと思っていました(255文字?私が推測したキャラクターですが、これは私の混乱の原因かもしれません)。作業している外部企業によってセットアップされたデータベースのテーブルを見ると、255文字より長いxmlのチャンクを保持するvarchar(20000)としてのフィールドセットアップがあります。なぜこれが機能するのですか? 20000は有効な値ですか?
少しグーグルで、mysqlのvarcharには65,535バイトの制限があり、varchar(65535) in use が表示されていることがわかりました。
MySQLバージョンに注意してください。
VARCHAR列の値は可変長文字列です。長さは、MySQL 5.0.3より前の0〜255、および5.0.3以降のバージョンでは0〜65,535の値として指定できます。 MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(65,535バイト、すべての列で共有)および使用される文字セットに依存します。
次のクエリを実行します...
select version() as myVersion
最大長を255から65535に変更したバージョン5.0.3以降で有効です。
CHAR
は常に最大255です。
入力が大きすぎると予想される場合は、代わりにTEXT、MEDIUMTEXTまたはLONGTEXTを使用することをお勧めします。
Varchar(2000)でインデックスを構築することはできませんが
この質問には MySQL VARCHAR最大サイズとは何ですか?
MySQLには最大行サイズ制限があることに注意してください
MySQLテーブルの内部表現には、65,535バイトの最大行サイズ制限があり、BLOBおよびTEXTタイプはカウントしません。 BLOB列とTEXT列は、内容が残りの行とは別に格納されるため、行サイズの制限に対して9〜12バイトのみを提供します。 テーブルの列数と行サイズの制限についての詳細をご覧ください。
1つの列が占有できる最大サイズは、MySQL 5.0.3の前後で異なります
VARCHAR列の値は可変長文字列です。長さは、MySQL 5.0.3より前の0〜255の値、および5.0.3以降のバージョンでは0〜65,535の値として指定できます。 MySQL 5.0.3以降のVARCHARの有効な最大長は、最大行サイズ(65,535バイト、すべての列で共有)および使用される文字セットに依存します。
ただし、utf8やutf8mb4などのマルチバイト文字セットを使用する場合、制限は低くなります。
行サイズの制限を克服するには、TEXT
型を使用します。
4つのTEXTタイプは、TINYTEXT、TEXT、MEDIUMTEXT、およびLONGTEXTです。これらは4つのBLOBタイプに対応し、最大長とストレージ要件は同じです。
MySQLマニュアルの状態
VARCHAR列の値は可変長文字列です。長さは、MySQL 5.0.3より前の0〜255、および5.0.3以降のバージョンでは0〜65,535の値として指定できます。
そのため、使用しているバージョンによって異なります。