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

Kan ikke indsætte ikke-latinske symboler i MySQL

I UTF-8, Упячка skal faktisk repræsenteres som \x423\x43F\x44F\x447\x43A\x430 . \xD0\xA3\xD0\xBF\xD1\x8F... betyder, at de er kodet forkert ved hjælp af ISO-8859-1.

Her er et testuddrag, der beviser dette:

String s = new String("Упячка".getBytes("UTF-8"), "ISO-8859-1"); // First decode with UTF-8, then (incorrectly) encode with ISO-8859-1.
for (char c : s.toCharArray()) {
    System.out.printf("\\x%X", (int) c);
}
 

Hvilke udskrifter

\xD0\xA3\xD0\xBF\xD1\x8F\xD1\x87\xD0\xBA\xD0\xB0

Så dit problem skal løses et skridt før. Da du taler om en Java-webapplikation, og denne streng sandsynligvis er et resultat af brugerinput, er du sikker på, at du har passet på HTTP-anmodnings- og svarkodningerne? Først i JSP skal du tilføje følgende til toppen af ​​JSP:

<%@ page pageEncoding="UTF-8" %>
 

Dette gengiver ikke kun siden i UTF-8, men det sætter også implicit en HTTP Content-Type svarhoved, der instruerer klienten om, at siden gengives ved hjælp af UTF-8, så klienten ved, at den skal vise ethvert indhold og behandle alle formularer ved hjælp af den samme kodning.

Nu, HTTP-anmodningsdelen, for GET-anmodninger skal du konfigurere den pågældende servletcontainer. I Tomcat for eksempel er dette et spørgsmål om at indstille URIEncoding attribut for HTTP-stikket i /conf/server.xml derfor. For POST-anmodninger bør dette allerede passes af, at klienten (webbrowseren) er smart nok til at bruge svarkodningen som angivet i JSP'en. Hvis det ikke gør det, skal du indsætte et Filter som tjekker og sæt anmodningskodningen.

For mere baggrundsinformation kan du finde denne artikel nyttigt.

Ud over alt dette har MySQL et andet problem med Unicode-tegn. Det understøtter kun UTF-8-tegn op til 3 bytes , ikke 4 bytes. Med andre ord er det kun BMP-intervallet på 65535 tegn, der understøttes, udenfor ikke. PostgreSQL understøtter det for eksempel fuldt ud. Dette skader muligvis ikke din webapplikation, men dette er bestemt noget, du skal huske på.



  1. R:strengliste i ifelse

  2. SQL-funktion returtype:TABLE vs SETOF-poster

  3. Skift brugeradgangskode via jdbc. Problemer med afleveringer med spørgsmålstegn

  4. Databaseforbindelse Afbryd altid forbindelsen, når du udvikler på samme pc som DB