Mysql
 sql >> база данни >  >> RDS >> Mysql

Не могат да се вмъкват нелатински символи в MySQL

В UTF-8, Упячка всъщност трябва да се представи като \x423\x43F\x44F\x447\x43A\x430 . \xD0\xA3\xD0\xBF\xD1\x8F... означава, че те са неправилно кодирани с помощта на ISO-8859-1.

Ето един тестов фрагмент, който доказва това:

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

Което отпечатва

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

Така че вашият проблем трябва да бъде решен една стъпка преди това. Тъй като говорите за уеб приложение на Java и този низ вероятно е резултат от потребителско въвеждане, сигурни ли сте, че сте се погрижили за кодирането на HTTP заявката и отговора? Първо, в JSP трябва да добавите следното в началото на JSP:

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

Това не само изобразява страницата в UTF-8, но също така имплицитно задава HTTP Content-Type заглавка на отговора, която инструктира клиента, че страницата е изобразена с UTF-8, така че клиентът да знае, че трябва да показва всяко съдържание и да обработва всякакви формуляри, използвайки същото кодиране.

Сега, частта за HTTP заявка, за GET заявки трябва да конфигурирате въпросния сервлетконтейнер. В Tomcat например това е въпрос на настройка на URIEncoding атрибут на HTTP конектор в /conf/server.xml съответно. За POST заявки това вече трябва да се погрижи от клиента (уеб браузъра), който е достатъчно умен, за да използва кодирането на отговора, както е посочено в JSP. Ако не стане, тогава ще трябва да въведете Filter който проверява и комплекти кодирането на заявката.

За повече основна информация можете да намерите тази статия полезно.

Освен всичко това, MySQL има друг проблем с Unicode знаците. Поддържа само UTF-8 знаци до 3 байта , а не 4 байта. С други думи, само BMP диапазонът от 65 535 знака се поддържа, извън него не. PostgreSQL например го поддържа напълно. Това може да не навреди на вашето уеб приложение, но със сигурност е нещо, което трябва да имате предвид.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. phpMyAdmin - Грешка> Неправилен параметър за формат?

  2. Производителност на MySQL в оператор OR

  3. Hibernate кодира грешно, докато продължаващи обекти [UTF-8]

  4. Как да разделя Mysql между МНОГО СЪРВЪРА?

  5. Размер за съхранение на IPv4, IPv6 адреси като низ