Mysql
 sql >> Base de données >  >> RDS >> Mysql

c# Problème avec mysql :code de valeur de chaîne incorrect 1366 pour la colonne à la ligne 1

\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.