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