\xE4\xB8\xAD\xE6\x96\x87
е шестнадесетичен за 中文
(„Китайски език“).
В MySQL това ще работи или с utf8
или utf8mb4
. Въпреки това, тъй като има няколко китайски символа, които се нуждаят от 4 байта, правилно сте да използвате utf8mb4. Междувременно COLLATION
(напр. utf8mb4_unicode_ci) няма значение за разглеждания въпрос.
Важен е наборът от знаци на отделната колона, а не на базата данни. А 191 kludge е необходим само в 5.5 и 5.6. Моля, предоставете SHOW CREATE TABLE
.
Друг начин за установяване на параметрите на връзката е да издадете SET NAMES utf8mb4
веднага след свързване. (Това не е за предпочитане, но може да си струва да опитате. Би трябвало да е заобиколно решение за споменатия проблем с Gorm.)
Получавате ли съобщение за грешка при свързване? Или при издаване на конкретна заявка? Ако е така, моля, предоставете тази заявка.
Проверете дали skip-character-set-client-handshake
не се използва.
Проверете „Най-добрата практика“ в https://stackoverflow.com/a/38363567/1766831
Допълнения Тъй като споменахте съхранена процедура, предлагам да направите SHOW CREATE PROCEDURE
за да видите с какъв набор от символи е изграден. Ето пример за това какво може да се случи:
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)
срещу:
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)
Ако не виждате utf8mb4 във вашата PROCEDURE
и FUNCTION
декларации, възстановете ги.