自分なりの目線で情報を発信します。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
MySQLのエラー "ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes"
MySQLで、1000文字のカラムにユニークキー制約をつけるとエラーになるようです。
(僕の環境は MySQL5.1.39 です)
default-character-set=utf8 の状態で、以下のSQLを実行するとエラー発生。
mysql> CREATE TABLE test -> ( -> id INT NOT NULL auto_increment, -> name VARCHAR(64), -> email VARCHAR(320) NOT NULL, -> password VARCHAR(32) NOT NULL, -> primary key (id) -> ); Query OK, 0 rows affected (0.00 sec) mysql> ALTER TABLE test ADD CONSTRAINT uq_test UNIQUE KEY (email, password); ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes mysql>
文字コードUTF-8の環境では、1文字に3バイトを使用するため、
(320 + 32) × 3 = 1056(bytes) となってしまいエラーになるようです。
そのため、対象カラムの文字コードのみASCIIにして実行しました。
mysql> CREATE TABLE test -> ( -> id INT NOT NULL auto_increment, -> name VARCHAR(64), -> email VARCHAR(320) CHARACTER SET ascii NOT NULL, -> password VARCHAR(32) CHARACTER SET ascii NOT NULL, -> primary key (id) -> ); Query OK, 0 rows affected (0.00 sec) mysql> ALTER TABLE test ADD CONSTRAINT uq_test UNIQUE KEY (email, password); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql>
文字コードがASCIIであることで、
(320 + 32) × 3 = 352(bytes)
となるため、ユニークキー制約を作成できました。
ちなみにユニークキー制約をつけるとエラーになるので、
mysql> CREATE TABLE test -> ( -> email VARCHAR(320) NOT NULL, -> password VARCHAR(32) NOT NULL, -> name VARCHAR(64), -> primary key (email, password) -> ); ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes mysql>
このようにプライマリキーが1000バイトを超えてもエラーが発生します。
そりゃそーですねw
記事を書くにあたり、以下のページを参考にさせていただきました。
ありがとうございます。
PR
お知らせ
最新記事
(03/11)
(02/23)
(01/08)
(12/28)
(11/18)
カテゴリー
プロフィール
HN:
shusatoo
性別:
男性
自己紹介:
基本PHP。JavaScriptちょっとだけ。Javaをほんの少し。
最新トラックバック
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
ブログ内検索
最古記事
(09/18)
(09/23)
(10/01)
(10/09)
(10/10)
カウンター
アク解アナライズ
ビジター