sql >> Databáze >  >> RDS >> Mysql

V MySQL nelze vložit jiné než latinské symboly

V UTF-8, Упячка by mělo být ve skutečnosti reprezentováno jako \x423\x43F\x44F\x447\x43A\x430 . \xD0\xA3\xD0\xBF\xD1\x8F... znamená, že byly nesprávně zakódovány pomocí ISO-8859-1.

Zde je testovací úryvek, který to dokazuje:

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

Které tiskne

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

Váš problém tedy musí být vyřešen o krok dříve. Protože mluvíte o webové aplikaci Java a tento řetězec je pravděpodobně výsledkem vstupu uživatele, jste si jisti, že jste se postarali o kódování požadavků a odpovědí HTTP? Nejprve v JSP musíte na začátek JSP přidat následující:

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

To nejen vykreslí stránku v UTF-8, ale také implicitně nastaví HTTP Content-Type hlavička odpovědi instruující klienta, že stránka je vykreslena pomocí UTF-8, takže klient ví, že by měl zobrazovat jakýkoli obsah a zpracovávat všechny formuláře pomocí stejného kódování.

Nyní, část požadavku HTTP, pro požadavky GET musíte nakonfigurovat příslušný servletcontainer. Například v Tomcatu jde o nastavení URIEncoding atribut konektor HTTP v /conf/server.xml podle toho. U požadavků POST by to již mělo být zajištěno tím, že klient (webový prohlížeč) je dostatečně chytrý, aby použil kódování odpovědi, jak je uvedeno v JSP. Pokud ne, budete muset zavést Filter které kontroluje a sady kódování požadavku.

Další informace o pozadí najdete tento článek užitečné.

Kromě toho všeho má MySQL další problém se znaky Unicode. Podporuje pouze znaky UTF-8 až 3 bajty , ne 4 bajty. Jinými slovy, podporován je pouze rozsah BMP 65535 znaků, mimo ne. Plně to podporuje například PostgreSQL. To nemusí poškodit vaši webovou aplikaci, ale určitě je to něco, co je třeba mít na paměti.



  1. MariaDB GROUP_CONCAT()

  2. ERROR 1366 (HY000):Nesprávná hodnota řetězce:'\xF0\x9F\x98\x9C' pro sloupec 'komentář' na řádku 1

  3. Proč STRAIGHT_JOIN tak drasticky zlepšuje tento dotaz a co to znamená, když je napsán za klíčovým slovem SELECT?

  4. MySQL. WordPress. Pomalý dotaz při použití příkazů IN