sql >> Database >  >> RDS >> Mysql

c# Problemen met mysql:Onjuiste tekenreekswaardecode 1366 voor kolom in rij 1

\xE4\xB8\xAD\xE6\x96\x87 is hex voor 中文 ("Chinese taal").

In MySQL werkt dit met utf8 of utf8mb4 . Aangezien er echter verschillende Chinese karakters zijn die 4 bytes nodig hebben, is het correct om utf8mb4 te gebruiken. Ondertussen is de COLLATION (bijv. utf8mb4_unicode_ci) maakt niet uit voor de betreffende vraag.

De karakterset van de individuele kolom is belangrijk, niet die van de database. En de 191 kludge is alleen nodig in 5.5 en 5.6. Geef a.u.b. SHOW CREATE TABLE .

Een andere manier om de verbindingsparameters tot stand te brengen, is door SET NAMES utf8mb4 . uit te geven direct na het aansluiten. (Dit heeft niet de voorkeur, maar kan het proberen waard zijn. Het zou een tijdelijke oplossing moeten zijn voor het genoemde Gorm-probleem.)

Krijg je de foutmelding bij het verbinden? Of bij het uitbrengen van een bepaalde vraag? Zo ja, geef die vraag dan op.

Controleer of skip-character-set-client-handshake wordt niet gebruikt.

Bekijk de "Best practice" in https://stackoverflow.com/a/38363567/1766831

Aanvullingen Aangezien je een opgeslagen procedure noemde, raad ik je aan om SHOW CREATE PROCEDURE te doen om te zien met welke charset het is gebouwd. Hier is een voorbeeld van wat er kan gebeuren:

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)

versus:

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)

Als u utf8mb4 niet ziet op uw PROCEDURE en FUNCTION aangiften, herbouw ze.



  1. Lijst met MySQL-specificaties voor datumnotatie

  2. Parameteriseren van bestandsnaam in MYSQL LOAD DATA INFILE

  3. Wanneer zou u een functie met tabelwaarde gebruiken?

  4. OPTIE (HERCOMPIEREN) is altijd sneller; Waarom?