4
mysql> create table newsgroup(
    ->  id integer unsigned NOT NULL AUTO_INCREMENT,
    ->  creater integer unsigned NOT NULL,
    ->  coremember integer unsigned DEFAULT NULL,
    ->  name varchar(300) not null unique,
    ->  description text,
    ->  created datetime not null,
    ->  PRIMARY KEY (id)
    -> );
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
mysql>

に変更300して250大丈夫ですが、よくわかりません。

4

4 に答える 4

6

データベースのエンコーディングはに設定されていますUTF8

UTF8文字は最大で3バイトを占める可能性があるMySQLため、767バイトは255文字です。

UNIQUEこのような長いテキストフィールドにインデックスを作成することはお勧めしません。

代わりに、プレーンなプレフィックス付きインデックスを作成します

CREATE INDEX ix_newsgroup_name ON newsgroup (name (30))

、これは接頭辞付き検索に十分であり、MD5一意性を保証するハッシュを格納するための別の列を追加します。

于 2010-01-26T13:38:09.373 に答える
1

767バイトは、InnoDBテーブルに指定されているプレフィックス制限です。:)

ここを参照してください:http://dev.mysql.com/doc/refman/5.1/en/create-index.html

于 2010-01-26T13:39:52.983 に答える
0

utf-8またはさらに重い文字セットを使用しているため、すべてのシンボルは1、2、3、または4バイトで表されます。MySQLではutf8、最大3バイトのシーケンス、およびutf8mb4最大4バイトのシーケンスを表します。

于 2010-01-26T13:38:27.813 に答える
-1

varcharからUNIQUEを削除します。

于 2010-01-26T13:40:08.153 に答える