J'essaie de comprendre pourquoi ma base de données n'accepte pas une clé composite unique sur MySQL v5.7.12 et en utilisant InnoDB. J'ai trouvé beaucoup de menaces sur les limites de tailles et de problèmes de clés uniques quand on les atteint, mais mes tailles sont loin d'atteindre ces limites (moins de 255 caractères même!). Les docs MySQL disent que la limite de clé est 3072bytes! http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.htmlMySQL clé unique semble prendre seulement les premiers 17 caractères de varchar
Pour simplifier, je fournir les informations connexes sur le terrain:
| ascii_name | varchar(200) | YES | | NULL | |
| feature_class | char(1) | YES | | NULL | |
| feature_code | varchar(10) | YES | | NULL | |
Je suis en train d'ajouter une clé composite unique,
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>
De l'erreur et le contenu de la table je me suis dit qu'il utilise seulement les 17 premiers caractères du champ. Mais pourquoi? Si je vérifie la table
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>
J'ai également essayé de donner une taille mais le résultat est identique.
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>
Alors, d'où vient cette limite? et est-il possible de l'augmenter? Tous les liens vers la documentation qui décrit cette limite sont les bienvenus!
Merci!
essayer 'comme « Rudkhaneh-vous Shur% '' – Alex
omg vous avez raison ... –