sql >> Databasteknik >  >> RDS >> Mysql

Hur fixar man felaktiga strängvärdesfel?

UPPDATERA till svaret nedan:

När frågan ställdes, betydde "UTF8" i MySQL utf8mb3 . Under tiden, utf8mb4 lades till, men såvitt jag vet byttes inte MySQLs "UTF8" till att betyda utf8mb4 .

Det betyder att du specifikt måste sätta "utf8mb4", om du menar det (och du bör använda utf8mb4 )

Jag kommer att behålla detta här istället för att bara redigera svaret, för att tydliggöra att det fortfarande finns en skillnad när du säger "UTF8"

Original

Jag skulle inte föreslå Richies att svara, eftersom du spolar till data inuti databasen. Du skulle inte åtgärda ditt problem utan försöka "gömma" det och inte kunna utföra viktiga databasoperationer med den trasiga informationen.

Om du stöter på det här felet är antingen data du skickar inte UTF-8-kodad eller så är din anslutning inte UTF-8. Kontrollera först att datakällan (en fil, ...) verkligen är UTF-8.

Kontrollera sedan din databasanslutning, du bör göra detta efter anslutning:

SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;

Kontrollera sedan att tabellerna där data lagras har teckenuppsättningen 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`
;

Senast kontrollera dina databasinställningar:

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

Om källa, transport och destination är utf8mb4 är ditt problem borta;)



  1. 911/112:En nödsamtalstjänstdatamodell

  2. java.security.AccessControlException:åtkomst nekad (java.security.SecurityPermission authProvider.SunMSCAPI)

  3. SQL Server Failover Cluster Installation -2

  4. Hur man genererar FRD-spårning i Oracle Apps 11i/R12