Mysql
 sql >> Datenbank >  >> RDS >> Mysql

c# Probleme mit mysql:Falscher Zeichenfolgenwertcode 1366 für Spalte in Zeile 1

\xE4\xB8\xAD\xE6\x96\x87 ist hex für 中文 ("chinesische Sprache").

In MySQL funktioniert dies entweder mit utf8 oder utf8mb4 . Da es jedoch mehrere chinesische Schriftzeichen gibt, die 4 Bytes benötigen, ist es richtig, utf8mb4 zu verwenden. Inzwischen die COLLATION (z. B. utf8mb4_unicode_ci) spielt für die vorliegende Frage keine Rolle.

Der Zeichensatz der einzelnen Spalte ist wichtig, nicht der der Datenbank. Und der Kludge 191 wird nur in 5.5 und 5.6 benötigt. Bitte geben Sie SHOW CREATE TABLE an .

Eine andere Möglichkeit, die Verbindungsparameter festzulegen, ist die Ausgabe von SET NAMES utf8mb4 unmittelbar nach dem Anschließen. (Dies wird nicht bevorzugt, könnte aber einen Versuch wert sein. Es sollte eine Problemumgehung für das erwähnte Gorm-Problem sein.)

Bekommst du die Fehlermeldung beim Verbinden? Oder bei einer bestimmten Anfrage? Wenn ja, geben Sie bitte diese Abfrage ein.

Überprüfen Sie, dass skip-character-set-client-handshake wird nicht verwendet.

Überprüfen Sie die "Best Practice" in https://stackoverflow.com/a/38363567/1766831

Nachträge Da Sie eine gespeicherte Prozedur erwähnt haben, schlage ich vor, dass Sie SHOW CREATE PROCEDURE ausführen um zu sehen, mit welchem ​​Zeichensatz es gebaut wurde. Hier ist ein Beispiel dafür, was passieren kann:

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)

gegen:

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)

Wenn Sie utf8mb4 nicht auf Ihrem PROCEDURE sehen und FUNCTION Deklarationen, erstellen Sie sie neu.