私のデータベースがMySQL v5.7.12とInnoDBで複合ユニークキーを受け入れない理由を理解しようとしています。ユニークな鍵のサイズと問題の制限について、私が見つけたのは私のサイズですが、私のサイズはその限界に近いところにありません(255文字未満です!)。 MySQLのドキュメントは、キーの制限は3072bytesだと言う!簡単にするためにhttp://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.htmlMySQLのユニークキーがvarcharの最初の17文字しか使わないようです
私は関連分野の情報を提供します。
| ascii_name | varchar(200) | YES | | NULL | |
| feature_class | char(1) | YES | | NULL | |
| feature_code | varchar(10) | YES | | NULL | |
私はエラーと私はそれを使用して考え出しテーブルの内容から、複合一意キー
mysql> alter table geonames_geonames add unique (ascii_name,feature_code,feature_class);
ERROR 1062 (23000): Duplicate entry 'Rudkhaneh-ye Shur-STM-H' for key 'ascii_name'
mysql>
を追加しようとしていますフィールドの最初の17文字のみ。しかし、なぜ?私がテーブルをチェックすれば
mysql> select ascii_name,feature_code,feature_class from geonames_geonames where name like 'Rudkhaneh-ye Shur-%';
+-------------------------------+--------------+---------------+
| ascii_name | feature_code | feature_class |
+-------------------------------+--------------+---------------+
| Rudkhaneh-ye Shur-e Dehram | STM | H |
| Rudkhaneh-ye Shur-e Sabzevar | STM | H |
| Rudkhaneh-ye Shur-e Sar Dasht | STM | H |
+-------------------------------+--------------+---------------+
3 rows in set (0.00 sec)
mysql>
私はまたサイズを与えようとしましたが、結果は同じです。
mysql> alter table geonames_geonames add unique (ascii_name(200),feature_code,feature_class);
ERROR 1062 (23000): Duplicate entry 'Rudkhaneh-ye Shur-STM-H' for key 'ascii_name'
mysql>
この制限はどこから来ますか?それを増やすことは可能ですか?この制限を説明しているドキュメントへのリンクは大歓迎です!
ありがとうございます!
試し 'シュール% '' – Alex
あなたは正しいです... –