2012-04-24 4 views
2

Matin,convertir le champ mysql utf8-bin en minuscule/majuscule

Un petit conseil recherché ici. Avoir une colonne de nom d'utilisateur dans une table utf8-bin.

Vous souhaitez conserver la sensibilité à la casse sur les noms d'utilisateur pour la connexion, mais souhaitez effectuer une vérification insensible à la casse sur la disponibilité du nom d'utilisateur.

quelles questions entourent l'utilisation

CONVERT(`usrnm` USING latin1) #or other charset. 

lorsqu'ils traitent avec quelque chose comme le chinois ou l'arabe?

Tous les conseils/pensées/commentaires sont les bienvenus.

Répondre

1
CREATE TABLE users (id INT NOT NULL PRIMARY KEY, usrnm VARCHAR(20) COLLATE UTF8_BIN); 

INSERT 
INTO users 
VALUES (1, 'Пользователь'); -- First letter in upper case 

SELECT * 
FROM users 
WHERE usrnm = 'пользователь'; -- First letter in lower case, not returned 


SELECT * 
FROM users 
WHERE usrnm COLLATE UTF8_GENERAL_CI = 'пользователь'; -- First letter in lower case, returned 

Notez que si vous voulez vous assurer l'unicité de la casse, il est préférable de faire la colonne UTF8_GENERAL_CI et déclarer UNIQUE:

CREATE TABLE users (id INT NOT NULL PRIMARY KEY, usrnm VARCHAR(20) COLLATE UTF8_GENERAL_CI UNIQUE); 

INSERT 
INTO users 
VALUES (1, 'Пользователь'); 

INSERT 
INTO users 
VALUES (2, 'пользователь'); -- unique violation 

SELECT * 
FROM users 
WHERE usrnm = 'пользователь' COLLATE UTF8_BIN; 
+0

Merci beaucoup - c'est le billet. 1 Q ... convertit la colonne en utf8_general_ci ne détruit pas la sensibilité à la casse de la requête qui permet la connexion? –

+0

@Ian: très probablement (si vous vérifiez la connexion simplement avec 'usrnm = 'value''). – Quassnoi