Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

c# Tendo problemas com mysql:código de valor de string incorreto 1366 para coluna na linha 1


\xE4\xB8\xAD\xE6\x96\x87 é hexadecimal para 中文 ("Língua chinesa").

No MySQL, isso funcionará com utf8 ou utf8mb4 . No entanto, como existem vários caracteres chineses que precisam de 4 bytes, você está correto em usar utf8mb4. Enquanto isso, o COLLATION (por exemplo, utf8mb4_unicode_ci) não importa para a questão em questão.

O charset da coluna individual é importante, não o do banco de dados. E o kludge 191 é necessário apenas em 5.5 e 5.6. Forneça SHOW CREATE TABLE .

Outra maneira de estabelecer os parâmetros de conexão é emitir SET NAMES utf8mb4 imediatamente após a conexão. (Isso não é o preferido, mas pode valer a pena tentar. Deve ser uma solução alternativa para o problema do Gorm mencionado.)

Você está recebendo a mensagem de erro ao conectar? Ou ao emitir uma consulta específica? Em caso afirmativo, forneça essa consulta.

Verifique se skip-character-set-client-handshake não está sendo usado.

Verifique a "prática recomendada" em https://stackoverflow.com/a/38363567/1766831

Adendos Como você mencionou um procedimento armazenado, sugiro que você faça SHOW CREATE PROCEDURE para ver com qual charset ele foi construído. Veja um exemplo do que pode acontecer:
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)

Se você não vir utf8mb4 em seu PROCEDURE e FUNCTION declarações, reconstruí-las.