sql >> Databasteknik >  >> RDS >> Mysql

Kan inte infoga icke-latinska symboler i MySQL

I UTF-8, Упячка ska faktiskt representeras som \x423\x43F\x44F\x447\x43A\x430 . \xD0\xA3\xD0\xBF\xD1\x8F... innebär att de är felaktigt kodade med ISO-8859-1.

Här är ett testutdrag som bevisar detta:

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);
}

Vilka skriver ut

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

Så ditt problem måste lösas ett steg innan. Eftersom du talar om en Java-webbapplikation och den här strängen troligen är resultatet av användarinmatning, är du säker på att du har tagit hand om HTTP-förfrågan och svarskodningar? Först, i JSP, måste du lägga till följande till toppen av JSP:

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

Detta återger inte bara sidan i UTF-8, utan ställer också implicit in en HTTP Content-Type svarshuvud som instruerar klienten att sidan renderas med UTF-8, så att klienten vet att den ska visa allt innehåll och bearbeta alla formulär med samma kodning.

Nu, HTTP-förfrågningsdelen, för GET-förfrågningar måste du konfigurera servletcontainern i fråga. I Tomcat till exempel handlar det om att ställa in URIEncoding attribut för HTTP-anslutningen i /conf/server.xml följaktligen. För POST-förfrågningar bör detta redan tas om hand genom att klienten (webbläsaren) är smart nog att använda svarskodningen som specificeras i JSP. Om det inte gör det måste du ta in ett Filter som kontrollerar och set förfrågningskodningen.

För mer bakgrundsinformation kan du hitta denna artikel användbar.

Förutom allt detta har MySQL ett annat problem med Unicode-tecken. Den stöder endast UTF-8-tecken upp till 3 byte , inte 4 byte. Med andra ord, endast BMP-intervallet på 65535 tecken stöds, utanför inte. PostgreSQL till exempel stöder det fullt ut. Detta kanske inte skadar din webbapplikation, men detta är verkligen något att tänka på.



  1. Hur importerar man enkelt flera sql-filer till en MySQL-databas?

  2. Kör SQL-fråga vid start av MySQL-tjänsten

  3. Olaglig användning av LONG datatyp Oracle

  4. Skapande av Oracle Trigger med kompileringsfel, ORA-02289:sekvensen finns inte