CLASSEMENT de "utf8_general_ci" n'est pas valide pour le JEU de CARACTÈRES 'binaire'?
mysql> SELECT LOCATE("n", "München") COLLATE utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'binary'
Comment puis-je me débarrasser de cette erreur?
Ce que j'ai déjà essayé (copie&coller):
$ mysql -u admin -p $DATABASE
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.69 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SELECT LOCATE("n", "München") COLLATE utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'binary'
mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT LOCATE("n", "München") COLLATE utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'binary'
mysql> SELECT LOCATE(_utf8"n", _utf8"München") COLLATE utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'binary'
mysql> SHOW VARIABLES LIKE "character_set_database";
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
1 row in set (0.00 sec)
OriginalL'auteur feklee | 2013-05-22
Vous devez vous connecter pour publier un commentaire.
Éventuellement le serveur a été compilé avec un jeu de caractères par défaut de binaire, de sorte que les littéraux de chaîne sont interprétés comme tels, ou le client est configuré pour utiliser un mode binaire lors de la communication avec le serveur. Vous pouvez modifier le client de connexion et de jeu de caractères en appelant
SET NAMES utf8
(si ce n'est pas recommandé si vos instructions SQL sont émises à partir de PHP, par exemple, que le PHP a ses propres commandes pour le réglage de la connexion du jeu de caractères). Voir Connexion Jeux de Caractères et les Classements dans le manuel de référence de MySQL.Vous pouvez également utiliser des "introducteurs" afin de spécifier explicitement le jeu de caractères utilisé pour les littéraux de chaîne de votre RECHERCHEZ fonction, par exemple:
Voir le manuel de référence page Littéral de Chaîne de caractères Jeu de Caractères et Collation pour plus de détails.
Désolé, à moitié endormi ici. J'ai remplacé la réponse.
Déjà avant de poser la question, j'ai essayé
SET NAMES utf8
, et maintenant, encore une fois, sans succès. Le introducteurs regarde comme une bonne solution, mais ils ne fonctionnent pas: Le message d'erreur persiste. J'ai essayé:SELECT LOCATE(_utf8"n", _utf8"München") COLLATE utf8_general_ci
Par ailleurs, je suis directement à l'aide de la console, pour jouer. J'ai commencé la console avec:mysql -u admin -p $database
j'ai juste courushow variables like "character_set_database"
. Résultat:utf8
Je me demande, pourquoi le classement de la matière? Trouvez doit retourner un résultat numérique, de sorte que vous ne peut certainement pas varier l'ordre d'un ensemble d'un nombre entier?
J'ai maintenant ajouté copie&collé un exemple de session dans ma question.
OriginalL'auteur Bobulous
La
COLLATE
dans mon exemple définit le classement de la valeur de retour deLOCATE
, dont le résultat est de typebinary
.Pour définir le classement des arguments:
Ma motivation était en fait de savoir si MySQL prend le classement
en compte lors de la recherche de la sous-chaîne. Malheureusement, il n'
pas. Voir le résultat de la deuxième commande:
Test avec une table temporaire (classement pris en compte dans
WHERE
clause, mais pas dansLOCATE
):OriginalL'auteur feklee
Je sais c'est tard, mais j'espère que cela aide quelqu'un. J'ai continué à obtenir la même erreur et je savais que mon jeux de caractères et les classements étaient très bien.
'@'Symboles dans votre déclaration qui n'appartiennent pas. J'ai été le tester ma procédure stockée comme une instruction select avec des variables, puis lors de la création de la procédure stockée a oublié d'enlever le '@' symboles. Inutile de dire, je me suis sentie très bête.
Je sais aussi que cela ne semble pas être le cas dans cette question mais c'est mon premier post DONC et je n'ai pas assez de rep à faire beaucoup de chose, donc je m'en excuse.
OriginalL'auteur Joe J