J'essaie de remplir une table SQL avec une liste de mots. La table elle-même est assez simple:
CREATE TABLE WORDS(
ID BIGINT AUTO_INCREMENT,
Word VARCHAR(128) NOT NULL UNIQUE,
PRIMARY KEY(ID)
);
Le problème que je rencontre est le suivant: lorsque je fais les insertions suivantes dos à dos
INSERT INTO WORDS(Word) VALUES('Seth');
INSERT INTO WORDS(Word) VALUES('seth');
La deuxième insertion échoue avec une violation de contrainte ("Entrée dupliquée 'seth' pour la clé 'Word'").
Comment obtenir que la contrainte UNIQUE
sur Word
soit sensible à la casse?
On dirait que mysql est insensible à la casse par défaut :
Vous devez probablement créer la colonne avec un classement sensible à la casse (par exemple, utf8_bin):
CREATE TABLE WORDS (
ID BIGINT AUTO_INCREMENT,
Word VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE,
PRIMARY KEY(ID)
);
Par défaut, MySQL ignore les différences de casse et les espaces de fin sur varchar
.
Si vous souhaitez que la table soit sensible à la casse, vous pouvez modifier la table pour qu'elle soit varchar(...) binary
.
Utilisez show create table
pour mieux comprendre comment MySQL convertit cela en notation complète.
Si vous devez faire attention aux espaces de fin et être sensible à la casse, utilisez varbinary
au lieu de varchar
.
J'ai fabriqué ma clé UNIQUE varchar (1000). Ça a marché.
Après quelques essais et erreurs, j'ai trouvé que tout ce qui était supérieur ou égal à 1100 varchar échouerait.
Pour clarifier, je n'ai pas essayé entre 1001 et 1099.
J'espère que cela t'aides.