【发布时间】:2016-11-13 14:49:55
【问题描述】:
我试图弄清楚为什么我的数据库不接受 MySQL v5.7.12 上的复合唯一键并使用 InnoDB。我发现了许多关于唯一密钥大小的限制以及当一个人达到这些限制时的问题,但我的大小远不接近这些限制(甚至少于 255 个字符!)。 MySQL 文档说密钥限制是 3072 字节! http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html
为简单起见,我提供了相关的字段信息:
| 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>
那么,这个限制从何而来?有可能增加吗?欢迎任何描述此限制的文档链接!
谢谢!
【问题讨论】:
-
试试
like 'Rudkhaneh-ye Shur%' -
天哪,你是对的......
标签: mysql varchar composite-key unique-key mysql-error-1062