sql >> Databáze >  >> RDS >> Mysql

Jak opravit chyby nesprávné hodnoty řetězce?

AKTUALIZACE na níže uvedenou odpověď:

Když byla otázka položena, "UTF8" v MySQL znamenalo utf8mb3 . Mezitím utf8mb4 bylo přidáno, ale pokud vím, MySQLs "UTF8" nebylo změněno na utf8mb4 .

To znamená, že byste museli konkrétně zadat "utf8mb4", pokud to myslíte vážně (a měli byste použít utf8mb4 )

Nechám to zde, místo abych jen upravil odpověď, aby bylo jasné, že je stále rozdíl, když říkáte "UTF8"

Původní

Nedoporučoval bych Richiesovi odpovídat, protože kazíte data v databázi. Svůj problém byste nevyřešili, ale pokusili byste se jej „skrýt“ a nebyli schopni provádět základní databázové operace se zpackanými daty.

Pokud narazíte na tuto chybu, buď data, která odesíláte, nemají kódování UTF-8, nebo vaše připojení není UTF-8. Nejprve ověřte, že zdroj dat (soubor, ...) skutečně je UTF-8.

Poté zkontrolujte připojení k databázi, měli byste to udělat po připojení:

SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;

Dále ověřte, že tabulky, kde jsou data uložena, mají znakovou sadu 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`
;

Nakonec zkontrolujte nastavení databáze:

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

Pokud jsou zdroj, transport a cíl utf8mb4, váš problém je pryč;)



  1. čárkami oddělený seznam jako jeden řetězec, T-SQL

  2. Proč proměnná oracle plsql varchar2 potřebuje velikost, ale parametr ne?

  3. Udělit výběr u všech stolů vlastněných konkrétním uživatelem

  4. Opakující se hodnoty ve sloupci