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

Warum werden arabische Buchstaben nicht in die Datenbank eingefügt?

Dies ist bekannt als Mojibake . Dies ist kein DB-Codierungsproblem, sondern ein HTTP-Codierungsproblem. Das Festlegen der POST-Anforderungszeichencodierung wie Sie es getan haben, ist in der Tat die richtige Lösung.

Fragezeichen treten auf, wenn beide Seiten der Verbindung sind bewusst ihrer eigenen Codierung. Gesendete/abgerufene Zeichen, die nicht von der Kodierung einer Seite abgedeckt sind, werden durch Fragezeichen ersetzt. Arabische Zeichen kommen in ISO-8859-1 nicht vor und werden daher durch Fragezeichen ersetzt. Das ist der Unterschied zu Mojibake, bei dem Zeichen gesendet werden, ohne zu prüfen, ob die von der Gegenseite verwendete Kodierung das Zeichen wirklich unterstützt. Sie erhalten am Ende falsch codierte Zeichen, die sich als unverständliche Zeichenfolge darstellen.

In diesem speziellen Fall ist sich der JDBC-Treiber selbst bewusst, dass er standardmäßig ISO-8859-1 verwendet, um die Zeichen an die DB zu übertragen, während die abgerufenen Zeichen in UTF-8 vorliegen (der MySQL-JDBC-Treiber schaut nicht auf die DB Tabellencodierung, obwohl sie in Ihrem Fall korrekt auf UTF-8 eingestellt ist). Sie müssen den JDBC-Treiber ausdrücklich anweisen, UTF-8 zum Decodieren von Zeichen zu verwenden, bevor Sie Daten an die DB übertragen. Dies muss als JDBC-Verbindungseigenschaften erfolgen, die als Abfragezeichenfolgenparameter in der JDBC-URL wie folgt definiert sind:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

Wenn Sie eine Container-verwaltete Datenquelle verwenden, geben Sie diese Eigenschaften einfach separat an, genauso wie Sie es für den Benutzernamen und das Passwort getan haben

useUnicode=yes
characterEncoding=UTF-8

Siehe auch: