sql >> Database teknologi >  >> RDS >> Mysql

c# Har problemer med mysql:Forkert strengværdikode 1366 for kolonne i række 1

\xE4\xB8\xAD\xE6\x96\x87 er hex for 中文 ("kinesisk sprog").

I MySQL vil dette fungere med enten utf8 eller utf8mb4 . Men da der er flere kinesiske tegn, der skal bruge 4 bytes, er det korrekt at bruge utf8mb4. I mellemtiden er COLLATION (f.eks. utf8mb4_unicode_ci) betyder ikke noget for spørgsmålet.

Den enkelte kolonnes tegnsæt er vigtigt, ikke databasens. Og 191 kludgen er kun nødvendig i 5.5 og 5.6. Angiv venligst SHOW CREATE TABLE .

En anden måde at etablere forbindelsesparametrene på er at udstede SET NAMES utf8mb4 umiddelbart efter tilslutning. (Dette foretrækkes ikke, men det kan være værd at prøve. Det burde være en løsning på det nævnte Gorm-problem.)

Får du fejlmeddelelsen, når du opretter forbindelse? Eller når du udsteder en bestemt forespørgsel? Hvis det er tilfældet, bedes du angive den forespørgsel.

Tjek at skip-character-set-client-handshake bliver ikke brugt.

Tjek "Bedste praksis" i https://stackoverflow.com/a/38363567/1766831

Tilføjelser Da du nævnte en lagret procedure, foreslår jeg, at du gør SHOW CREATE PROCEDURE for at se, hvilket tegnsæt den er bygget med. Her er et eksempel på, hvad der kan ske:

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)

Hvis du ikke kan se utf8mb4 på din PROCEDURE og FUNCTION erklæringer, genopbygg dem.



  1. Fejl:ER_NOT_SUPPORTED_AUTH_MODE:Klienten understøtter ikke godkendelsesprotokol anmodet af serveren; overveje at opgradere MySQL-klienten

  2. Plsql for at stave nummer (valuta) til italiensk valuta uden hardkodet oversættelsesnummer

  3. Hvad er bedste praksis for selvopdatering af PHP+MySQL-applikationer?

  4. Strategi til at kortlægge flere filer i en enkelt tabel til et enkelt felt i en anden tabel