\xE4\xB8\xAD\xE6\x96\x87
est hexadécimal pour 中文
("langue chinoise").
Dans MySQL, cela fonctionnera soit avec utf8
ou utf8mb4
. Cependant, comme plusieurs caractères chinois nécessitent 4 octets, vous avez raison d'utiliser utf8mb4. Pendant ce temps, le COLLATION
(par exemple, utf8mb4_unicode_ci) n'a pas d'importance pour la question en cours.
Le jeu de caractères de la colonne individuelle est important, pas celui de la base de données. Et le 191 kludge n'est nécessaire qu'en 5.5 et 5.6. Veuillez fournir SHOW CREATE TABLE
.
Une autre façon d'établir les paramètres de connexion consiste à émettre SET NAMES utf8mb4
immédiatement après la connexion. (Ce n'est pas préférable, mais cela vaut peut-être la peine d'essayer. Cela devrait être une solution de contournement pour le problème Gorm mentionné.)
Recevez-vous le message d'erreur lors de la connexion? Ou lors de l'émission d'une requête particulière ? Si oui, veuillez fournir cette requête.
Vérifiez que skip-character-set-client-handshake
n'est pas utilisé.
Vérifiez les "Meilleures pratiques" dans https://stackoverflow.com/a/38363567/1766831
Addenda Puisque vous avez mentionné une procédure stockée, je vous suggère de faire SHOW CREATE PROCEDURE
pour voir avec quel jeu de caractères il a été construit. Voici un exemple de ce qui peut arriver :
mysql> SET NAMES latin1;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE PROCEDURE x () BEGIN END ;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW CREATE PROCEDURE x \G
*************************** 1. row ***************************
Procedure: x
sql_mode: NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `x`()
BEGIN END
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: utf8mb4_unicode_520_ci
1 row in set (0.00 sec)
mysql> DROP PROCEDURE x;
Query OK, 0 rows affected (0.01 sec)
contre :
mysql> SET NAMES utf8mb4;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE PROCEDURE x () BEGIN END ;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW CREATE PROCEDURE x \G
*************************** 1. row ***************************
Procedure: x
sql_mode: NO_ENGINE_SUBSTITUTION
Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `x`()
BEGIN END
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
Database Collation: utf8mb4_unicode_520_ci
1 row in set (0.00 sec)
Si vous ne voyez pas utf8mb4 sur votre PROCEDURE
et FUNCTION
déclarations, reconstruisez-les.