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

Hvordan rettes forkerte strengværdifejl?

OPDATERING til nedenstående svar:

Den gang spørgsmålet blev stillet, betød "UTF8" i MySQL utf8mb3 . I mellemtiden, utf8mb4 blev tilføjet, men mig bekendt blev MySQLs "UTF8" ikke skiftet til at betyde utf8mb4 .

Det betyder, at du specifikt skal sætte "utf8mb4", hvis du mener det (og du skal bruge utf8mb4 )

Jeg gemmer dette her i stedet for blot at redigere svaret, for at gøre det klart, at der stadig er en forskel, når man siger "UTF8"

Original

Jeg vil ikke foreslå Richies at svare, fordi du skruer op for dataene inde i databasen. Du ville ikke løse dit problem, men prøve at "skjule" det og ikke være i stand til at udføre essentielle databaseoperationer med de skøre data.

Hvis du støder på denne fejl, er de data, du sender, enten ikke UTF-8-kodet, eller din forbindelse er ikke UTF-8. Først skal du kontrollere, at datakilden (en fil, ...) virkelig er UTF-8.

Kontroller derefter din databaseforbindelse, du skal gøre dette efter tilslutning:

SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;

Derefter skal du kontrollere, at tabellerne, hvor dataene er gemt, har tegnsættet utf8mb4:

SELECT
  `tables`.`TABLE_NAME`,
  `collations`.`character_set_name`
FROM
  `information_schema`.`TABLES` AS `tables`,
  `information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
WHERE
  `tables`.`table_schema` = DATABASE()
  AND `collations`.`collation_name` = `tables`.`table_collation`
;

Til sidst skal du kontrollere dine databaseindstillinger:

mysql> show variables like '%colla%';
mysql> show variables like '%charac%';

Hvis kilde, transport og destination er utf8mb4, er dit problem væk;)



  1. Opret tabel DDL med Execute Immediate i Oracle Database del 2

  2. Søg tekst i felter i hver tabel i en MySQL-database

  3. Indsæt, ved dubletopdatering i PostgreSQL?

  4. SQL GROUP BY-klausul for begyndere