Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można wstawić symboli niełacińskich w MySQL

W UTF-8, Упячка powinien być reprezentowany jako \x423\x43F\x44F\x447\x43A\x430 . \xD0\xA3\xD0\xBF\xD1\x8F... oznacza, że ​​zostały nieprawidłowo zakodowane przy użyciu ISO-8859-1.

Oto fragment testowy, który to potwierdza:

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

Które wydruki

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

Więc twój problem musi zostać rozwiązany jeden krok wcześniej. Skoro mówisz o aplikacji internetowej Java, a ten ciąg jest prawdopodobnie wynikiem wprowadzania danych przez użytkownika, czy na pewno zadbałeś o kodowanie żądań i odpowiedzi HTTP? Najpierw w JSP musisz dodać następujące elementy na górze JSP:

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

To nie tylko renderuje stronę w UTF-8, ale także pośrednio ustawia HTTP Content-Type nagłówek odpowiedzi instruujący klienta, że ​​strona jest renderowana przy użyciu UTF-8, aby klient wiedział, że powinien wyświetlać dowolną treść i przetwarzać dowolne formularze przy użyciu tego samego kodowania.

Teraz część dotycząca żądania HTTP, dla żądań GET należy skonfigurować odpowiedni kontener serwletów. Na przykład w Tomcat jest to kwestia ustawienia URIEncoding atrybut łącznik HTTP w /conf/server.xml odpowiednio. W przypadku żądań POST powinno to być już załatwione przez klienta (przeglądarkę internetową), która jest wystarczająco inteligentna, aby użyć kodowania odpowiedzi określonego w JSP. Jeśli tak się nie stanie, musisz wprowadzić Filter które sprawdza i zestawy kodowanie żądania.

Więcej informacji ogólnych można znaleźć w tym artykule przydatne.

Poza tym MySQL ma jeszcze jeden problem ze znakami Unicode. Obsługuje tylko znaki UTF-8 do 3 bajtów , a nie 4 bajty. Innymi słowy, obsługiwany jest tylko zakres BMP wynoszący 65535 znaków, poza nie. Na przykład PostgreSQL w pełni je obsługuje. Może to nie zaszkodzić Twojej aplikacji internetowej, ale z pewnością należy o tym pamiętać.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przeanalizować dane z obiektu Rows w node.js,express.js,mysql2

  2. Zombie Connections do MySQL przy użyciu c3p0 z tomcat

  3. MySQL – NAJMNIEJSZE i NAJWIĘKSZE operatory porównania

  4. MySQL Query pobiera ostatnie N wierszy na grupę

  5. Pozycja rzędu w widoku MySQL