\xE4\xB8\xAD\xE6\x96\x87
är hex för 中文
("kinesiska språket").
I MySQL kommer detta att fungera med antingen utf8
eller utf8mb4
. Men eftersom det finns flera kinesiska tecken som behöver 4 byte, är det rätt att använda utf8mb4. Samtidigt visas COLLATION
(t.ex. utf8mb4_unicode_ci) spelar ingen roll för den aktuella frågan.
Den enskilda kolumns teckenuppsättning är viktig, inte databasens. Och 191 kludgen behövs bara i 5.5 och 5.6. Ange SHOW CREATE TABLE
.
Ett annat sätt att upprätta anslutningsparametrarna är att utfärda SET NAMES utf8mb4
direkt efter anslutning. (Detta är inte att föredra, men kan vara värt att prova. Det borde vara en lösning för Gorm-problemet som nämns.)
Får du felmeddelandet när du ansluter? Eller när du skickar en viss fråga? Om så är fallet, vänligen ange den frågan.
Kontrollera att skip-character-set-client-handshake
används inte.
Kontrollera "Bästa praxis" i https://stackoverflow.com/a/38363567/1766831
Tillägg Eftersom du nämnde en lagrad procedur, föreslår jag att du gör SHOW CREATE PROCEDURE
för att se vilken teckenuppsättning den byggdes med. Här är ett exempel på vad som kan hända:
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)
kontra:
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)
Om du inte ser utf8mb4 i din PROCEDURE
och FUNCTION
deklarationer, bygg om dem.