Mysql
 sql >> Database >  >> RDS >> Mysql

c# Problemi con mysql:codice valore stringa errato 1366 per colonna alla riga 1

\xE4\xB8\xAD\xE6\x96\x87 è esadecimale per 中文 ("lingua cinese").

In MySQL, funzionerà con utf8 o utf8mb4 . Tuttavia, poiché ci sono diversi caratteri cinesi che richiedono 4 byte, è corretto utilizzare utf8mb4. Nel frattempo, il COLLATION (ad esempio, utf8mb4_unicode_ci) non ha importanza per la domanda in mano.

Il set di caratteri della singola colonna è importante, non quello del database. E il 191 kludge è necessario solo in 5.5 e 5.6. Si prega di fornire SHOW CREATE TABLE .

Un altro modo per stabilire i parametri di connessione è emettere SET NAMES utf8mb4 subito dopo la connessione. (Questo non è preferito, ma potrebbe valere la pena provare. Dovrebbe essere una soluzione alternativa per il problema di Gorm menzionato.)

Ricevi il messaggio di errore durante la connessione? O quando si emette una query particolare? In tal caso, fornisci la query.

Verifica che skip-character-set-client-handshake non viene utilizzato.

Consulta le "Best practice" in https://stackoverflow.com/a/38363567/1766831

Appendice Dato che hai menzionato una procedura memorizzata, ti suggerisco di eseguire SHOW CREATE PROCEDURE per vedere con quale set di caratteri è stato creato. Ecco un esempio di cosa può succedere:

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)

contro:

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 non vedi utf8mb4 sul tuo PROCEDURE e FUNCTION dichiarazioni, ricostruirle.