sql >> Base de Datos >  >> RDS >> Mysql

c# Tiene problemas con mysql:código de valor de cadena incorrecto 1366 para la columna en la fila 1

\xE4\xB8\xAD\xE6\x96\x87 es hexadecimal para 中文 ("idioma chino").

En MySQL, esto funcionará con utf8 o utf8mb4 . Sin embargo, dado que hay varios caracteres chinos que necesitan 4 bytes, es correcto usar utf8mb4. Mientras tanto, la COLLATION (p. ej., utf8mb4_unicode_ci) no importa para la pregunta en cuestión.

El juego de caracteres de la columna individual es importante, no el de la base de datos. Y el 191 kludge solo se necesita en 5.5 y 5.6. Proporcione SHOW CREATE TABLE .

Otra forma de establecer los parámetros de conexión es emitir SET NAMES utf8mb4 inmediatamente después de conectar. (Esto no es lo mejor, pero podría valer la pena intentarlo. Debería ser una solución para el problema de Gorm mencionado).

¿Recibe el mensaje de error al conectarse? ¿O al emitir una consulta en particular? Si es así, proporcione esa consulta.

Compruebe que skip-character-set-client-handshake no se está utilizando.

Consulte las "mejores prácticas" en https://stackoverflow.com/a/38363567/1766831

Anexos Como mencionó un procedimiento almacenado, le sugiero que haga SHOW CREATE PROCEDURE para ver con qué conjunto de caracteres se construyó. He aquí un ejemplo de lo que puede suceder:

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)

contra:

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 no ve utf8mb4 en su PROCEDURE y FUNCTION declaraciones, reconstrúyalas.