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

Hvorfor indsættes arabiske bogstaver ikke i databasen?

Dette er kendt som Mojibake . Dette er ikke et DB-kodningsproblem, men et HTTP-kodningsproblem. At indstille POST-anmodningstegnkodningen, som du gjorde, er faktisk den rigtige løsning.

Spørgsmålstegn opstår, når begge sider af forbindelsen er bevidste af deres egen kodning. Sendte/hentede tegn, som ikke er omfattet af kodningen på den ene side, vil blive erstattet af spørgsmålstegn. Arabiske tegn forekommer ikke i ISO-8859-1, og de erstattes derfor af spørgsmålstegn. Det er forskellen med Mojibake, hvor karakterer sendes uden at kontrollere, om den kodning, der bruges af den anden side, virkelig understøtter karakteren. Du ender med forkert kodede tegn, som præsenterer sig selv som en uforståelig sekvens af tegn.

I dette særlige tilfælde er JDBC-driveren i sig selv klar over, at den bruger ISO-8859-1 som standard til at overføre tegnene til DB, mens de hentede tegn er i UTF-8 (MySQL JDBC-driveren ser ikke på DB'en tabelkodning, selvom den er korrekt indstillet til UTF-8 i dit tilfælde). Du skal udtrykkeligt fortælle JDBC-driveren om at bruge UTF-8 til at afkode tegn, før du sender data til DB. Dette skal gøres som JDBC-forbindelsesegenskaber, der er defineret som forespørgselsstrengparametre i JDBC URL som sådan:

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

Hvis du bruger en containerstyret datakilde, skal du blot angive disse egenskaber separat på samme måde, som du gjorde for brugernavnet og adgangskoden

useUnicode=yes
characterEncoding=UTF-8

Se også:




  1. PostgreSQL - indstil en standardcelleværdi i henhold til en anden celleværdi

  2. Relationelle vs ikke-relationelle databaser – Del 2

  3. En købmandsleveringsdatamodel

  4. Opret et SQL Server Agent Job ved hjælp af T-SQL