Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie behebt man Fehler wegen falscher Zeichenfolgenwerte?

AKTUALISIEREN auf die folgende Antwort:

Als die Frage gestellt wurde, bedeutete "UTF8" in MySQL utf8mb3 . In der Zwischenzeit utf8mb4 wurde hinzugefügt, aber meines Wissens wurde MySQLs "UTF8" nicht auf utf8mb4 umgestellt .

Das heißt, Sie müssten ausdrücklich "utf8mb4" angeben, wenn Sie es meinen (und Sie sollten utf8mb4 verwenden )

Ich werde dies hier behalten, anstatt nur die Antwort zu bearbeiten, um klarzustellen, dass es immer noch einen Unterschied gibt, wenn man "UTF8" sagt

Original

Ich würde Richies Antwort nicht vorschlagen, weil Sie die Daten in der Datenbank vermasseln. Sie würden Ihr Problem nicht beheben, sondern versuchen, es zu "verstecken" und mit den verkackten Daten keine wesentlichen Datenbankoperationen durchführen zu können.

Wenn dieser Fehler auftritt, sind entweder die von Ihnen gesendeten Daten nicht UTF-8-codiert oder Ihre Verbindung ist nicht UTF-8. Überprüfen Sie zunächst, ob die Datenquelle (eine Datei, ...) wirklich ist UTF-8.

Überprüfen Sie dann Ihre Datenbankverbindung, Sie sollten dies tun, nachdem Sie sich verbunden haben:

SET NAMES 'utf8mb4';
SET CHARACTER SET utf8mb4;

Überprüfen Sie als Nächstes, ob die Tabellen, in denen die Daten gespeichert sind, den Zeichensatz utf8mb4 haben:

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`
;

Überprüfen Sie zuletzt Ihre Datenbankeinstellungen:

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

Wenn Quelle, Transport und Ziel utf8mb4 sind, ist Ihr Problem weg;)