sql >> Databasteknik >  >> RDS >> Mysql

Varför infogas inte arabiska bokstäver i databasen?

Detta är känt som Mojibake . Detta är inte ett DB-kodningsproblem, utan ett HTTP-kodningsproblem. Att ställa in teckenkodningen för POST-begäran som du gjorde är verkligen den rätta lösningen.

Frågetecken uppstår när båda sidorna av anslutningen är medvetna av sin egen kodning. Skickade/hämtade tecken som inte täcks av ena sidans kodning kommer att ersättas av frågetecken. Arabiska tecken förekommer inte i ISO-8859-1 och därför ersätts de av frågetecken. Det är skillnaden med Mojibake där tecken skickas utan att kontrollera om kodningen som används av den andra sidan verkligen stöder karaktären. Du kommer att hamna felaktigt kodade tecken som presenterar sig som en oförståelig sekvens av tecken.

I det här specifika fallet är JDBC-drivrutinen i sig själv medveten om att den använder ISO-8859-1 som standard för att överföra tecknen till DB, medan de hämtade tecknen är i UTF-8 (MySQL JDBC-drivrutinen tittar inte på DB:n tabellkodning, även om den är korrekt inställd på UTF-8 i ditt fall). Du måste uttryckligen tala om för JDBC-drivrutinen att använda UTF-8 för att avkoda tecken innan du överför data till DB. Detta ska göras som JDBC-anslutningsegenskaper som definieras som frågesträngsparametrar i JDBC URL:en så här:

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

Om du använder en containerhanterad datakälla, specificera bara dessa egenskaper separat på samma sätt som du gjorde för användarnamnet och lösenordet

useUnicode=yes
characterEncoding=UTF-8

Se även:




  1. Hur man använder ROW_NUMBER i SQLite

  2. Kan jag använda flera markörer på en anslutning med pyodbc och MS SQL Server?

  3. Excel VBA:skriva till mysql-databas

  4. Välja rader ordnade efter någon kolumn och distinkta i en annan