我正在尝试弄清楚为什么我的数据库不接受使用InnoDB的MySQL v5.7.12上的复合唯一键。我发现了许多关于唯一键大小限制和问题的三个广告,但我的大小远远达不到这些限制(甚至少于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>那么,这个限制是从哪里来的?有没有可能增加它?欢迎任何描述此限制的文档链接!
谢谢!
https://stackoverflow.com/questions/38310625
复制相似问题