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

Come correggere gli errori di valori di stringa errati?

AGGIORNAMENTO alla seguente risposta:

Quando è stata posta la domanda, "UTF8" in MySQL significava utf8mb3 . Nel frattempo, utf8mb4 è stato aggiunto, ma per quanto ne so MySQLs "UTF8" non è stato cambiato in utf8mb4 .

Ciò significa che dovresti inserire specificamente "utf8mb4", se lo intendi (e dovresti usare utf8mb4 )

Lo terrò qui invece di modificare semplicemente la risposta, per chiarire che c'è ancora una differenza quando si dice "UTF8"

Originale

Non suggerirei la risposta di Richies, perché stai rovinando i dati all'interno del database. Non risolveresti il ​​tuo problema, ma proveresti a "nasconderlo" e non essere in grado di eseguire operazioni di database essenziali con i dati schifosi.

Se riscontri questo errore, i dati che stai inviando non sono codificati UTF-8 o la tua connessione non è UTF-8. Innanzitutto, verifica che l'origine dati (un file, ...) veramente è UTF-8.

Quindi, controlla la connessione al database, dovresti farlo dopo la connessione:

SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;

Successivamente, verifica che le tabelle in cui sono archiviati i dati abbiano il set di caratteri 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`
;

Infine, controlla le impostazioni del database:

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

Se sorgente, trasporto e destinazione sono utf8mb4, il tuo problema è scomparso;)