忍者ブログ
自分なりの目線で情報を発信します。
×

[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
お知らせ
プロフィール
HN:
shusatoo
性別:
男性
自己紹介:
基本PHP。JavaScriptちょっとだけ。Javaをほんの少し。
おすすめ本
最新コメント
[10/09 shusatoo]
[10/09 misney]
最新トラックバック
カレンダー
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
ブログ内検索
カウンター
アク解アナライズ
バーコード
ビジター

Copyright © [ 開発メモるアル ] All rights reserved.
Special Template : 忍者ブログ de テンプレート
Special Thanks : 忍者ブログ
Commercial message : [PR]