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

Dlaczego litery arabskie nie są wstawiane do bazy danych?

Jest to znane jako Mojibake . To nie jest problem z kodowaniem DB, ale problem z kodowaniem HTTP. Ustawienie kodowania znaków żądania POST, tak jak to zrobiłeś, jest rzeczywiście właściwym rozwiązaniem.

Znaki zapytania pojawiają się, gdy oba strony połączenia są świadome własnego kodowania. Wysłane/odzyskane znaki, które nie są objęte kodowaniem z jednej strony, zostaną zastąpione znakami zapytania. Znaki arabskie nie występują w ISO-8859-1 i dlatego są zastępowane znakami zapytania. Na tym polega różnica w przypadku Mojibake, w której znaki są wysyłane bez sprawdzania, czy kodowanie używane przez drugą stronę rzeczywiście obsługuje znak. Otrzymasz niepoprawnie zakodowane znaki, które wyglądają jak niezrozumiała sekwencja znaków.

W tym konkretnym przypadku sterownik JDBC sam zdaje sobie sprawę, że domyślnie używa ISO-8859-1 do przesyłania znaków do bazy danych, podczas gdy pobrane znaki są w UTF-8 (sterownik MySQL JDBC nie patrzy na bazę danych kodowanie tabeli, nawet jeśli w twoim przypadku jest poprawnie ustawione na UTF-8). Musisz wyraźnie powiedzieć sterownikowi JDBC, aby używał UTF-8 do dekodowania znaków przed przesłaniem danych do DB. Należy to zrobić jako właściwości połączenia JDBC, które są zdefiniowane jako parametry ciągu zapytania w adresie URL JDBC w następujący sposób:

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

Jeśli korzystasz ze źródła danych zarządzanego przez kontener, po prostu określ te właściwości osobno w taki sam sposób, jak w przypadku nazwy użytkownika i hasła

useUnicode=yes
characterEncoding=UTF-8

Zobacz też:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy ograniczenie zapytania do jednego rekordu poprawia wydajność?

  2. Dynamiczne tworzenie kolumn z danych wierszy za pomocą funkcji Wybierz w BigQuery

  3. Czy przechowywanie liczników rekordów bazy danych jest zbędne?

  4. Test poprawności połączenia MySQL w źródle danych:SELECT 1 czy coś lepszego?

  5. Jak połączyć się z Mysql za pomocą C#?