sql >> Database >  >> RDS >> Mysql

Waarom worden Arabische letters niet in de database ingevoegd?

Dit staat bekend als Mojibake . Dit is geen DB-coderingsprobleem, maar een HTTP-coderingsprobleem. De tekencodering van het POST-verzoek instellen zoals u deed, is inderdaad de juiste oplossing.

Vraagtekens treden op wanneer de beide kanten van de verbinding zijn op de hoogte van hun eigen codering. Verzonden/opgehaalde tekens die niet worden gedekt door de codering van één zijde, worden vervangen door vraagtekens. Arabische karakters komen niet voor in ISO-8859-1 en daarom zijn ze vervangen door vraagtekens. Dat is het verschil met Mojibake waarbij karakters worden verzonden zonder te controleren of de door de andere partij gebruikte codering het karakter echt ondersteunt. Je krijgt uiteindelijk verkeerd gecodeerde tekens die zich voordoen als een onverstaanbare reeks tekens.

In dit specifieke geval weet het JDBC-stuurprogramma zelf dat het standaard ISO-8859-1 gebruikt om de tekens naar DB te verzenden, terwijl de opgehaalde tekens zich in UTF-8 bevinden (het MySQL JDBC-stuurprogramma kijkt niet naar de DB tabelcodering, ook al is deze in uw geval correct ingesteld op UTF-8). U moet het JDBC-stuurprogramma expliciet vertellen om UTF-8 te gebruiken om tekens te decoderen voordat gegevens naar DB worden verzonden. Dit moet worden gedaan als JDBC-verbindingseigenschappen die als queryreeksparameters in de JDBC-URL als volgt worden gedefinieerd:

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

Als u een door een container beheerde gegevensbron gebruikt, geeft u die eigenschappen gewoon afzonderlijk op op dezelfde manier als voor de gebruikersnaam en het wachtwoord

useUnicode=yes
characterEncoding=UTF-8

Zie ook:




  1. MySQL - JOIN en WHERE gebruiken om het gemiddelde aantal uren te bepalen

  2. Groepeer meerdere mysql-resultaten met één kolomwaarde

  3. Hoe verwijder ik alle MySQL-tabellen van de opdrachtregel zonder DROP-databasemachtigingen?

  4. Muziekbibliotheek MySQL-database