[解決済み] MySQLでvarchar(max)に相当するもの?
2022-03-04 21:56:45
質問
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 は今後の挿入をすべてシングルバイト文字に制限すると仮定することはできません。
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)
関連
-
[解決済み] ONLY_FULL_GROUP_BYの無効化
-
[解決済み] "sqlstate[23000]: 整合性制約違反 "を有効な制約で
-
[解決済み] WindowsでMySQLの画面コンソールをクリアする方法は?
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] varcharとnvarcharの違いは何ですか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLです。大きなVARCHARとTEXTの比較?
-
[解決済み] MySQLで重複する値を検索する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】カラムのデータが切り捨てられた?
-
[解決済み] MySQL エラー: キーの長さがないキー指定
-
[解決済み] テーブル 'performance_schema.session_variables' は存在しません。
-
[解決済み] mysqladmin: 'localhost'のサーバーへの接続に失敗しました。
-
[解決済み] MySQLが重複したレコードを削除し、最新のレコードを保持する
-
[解決済み] MYSQLのTIMESTAMP比較
-
[解決済み] ルートユーザーでログインしているのに、phpMyAdminがデータベースを作成する権限がないと言う
-
[解決済み] dpkg: error processing package mysql-server (dependency problems)?
-
[解決済み] 1行目の列 'id' に不正な整数値 '' があります。
-
[解決済み] DEFAULT NULLとCHECKBOX NULL mysqlの違いは何ですか?