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

Защо арабските букви не се вмъкват в базата данни?

Това е известно като Mojibake . Това не е проблем с DB кодирането, а проблем с HTTP кодирането. Задаването на кодирането на символите на POST заявка, както го направихте, наистина е правилното решение.

Въпросителни знаци се появяват, когато и двете страните на връзката са наясно на собственото им кодиране. Изпратените/извлечените знаци, които не са обхванати от кодирането на едната страна, ще бъдат заменени с въпросителни. Арабските знаци не се срещат в ISO-8859-1 и следователно те са заменени с въпросителни. Това е разликата с Mojibake, при която символите се изпращат, без да се проверява дали кодирането, използвано от другата страна, наистина поддържа знака. В крайна сметка ще получите неправилно кодирани знаци, което се представя като неразбираема последователност от знаци.

В този конкретен случай JDBC драйверът сам по себе си е наясно, че използва ISO-8859-1 по подразбиране за предаване на знаците към DB, докато извлечените знаци са в UTF-8 (драйверът на MySQL JDBC не разглежда DB кодиране на таблица, въпреки че е правилно зададено на UTF-8 във вашия случай). Трябва изрично да кажете на JDBC драйвера да използва UTF-8 за декодиране на знаци, преди да предаде данни към DB. Това трябва да се направи като свойства на JDBC връзка, които са дефинирани като параметри на низ на заявка в URL адреса на JDBC така:

jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

Ако използвате управляван от контейнер източник на данни, просто посочете тези свойства отделно по същия начин, както направихте за потребителското име и паролата

useUnicode=yes
characterEncoding=UTF-8

Вижте също:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкнете select MySQL с подготвени оператори

  2. Как работи функцията LOAD_FILE() в MySQL

  3. Таблица „performance_schema.session_variables“ не съществува

  4. проверете дали една колона съдържа ВСИЧКИ стойности на друга колона - Mysql

  5. Преобразувайте strftime в SQLite заявка в MySQL