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

Proč se arabská písmena nevkládají do databáze?

Toto je známé jako Mojibake . Toto není problém s kódováním DB, ale problém s kódováním HTTP. Nastavení kódování znaků požadavku POST tak, jak jste to udělali, je skutečně správným řešením.

Otazníky se objeví, když obě strany připojení jsou vědomé jejich vlastního kódování. Odeslané/načtené znaky, které nejsou pokryty kódováním jedné strany, budou nahrazeny otazníky. Arabské znaky se v ISO-8859-1 nevyskytují, a proto jsou nahrazeny otazníky. To je rozdíl oproti Mojibake, kde jsou znaky odesílány bez kontroly, zda kódování používané druhou stranou skutečně znak podporuje. Skončíte s nesprávně zakódovanými znaky, které se prezentují jako nesrozumitelná sekvence znaků.

V tomto konkrétním případě si ovladač JDBC sám uvědomuje, že k přenosu znaků do DB standardně používá ISO-8859-1, zatímco načtené znaky jsou v UTF-8 (ovladač MySQL JDBC se na DB nedívá kódování tabulky, i když je ve vašem případě správně nastaveno na UTF-8). Musíte explicitně říci ovladači JDBC, aby používal UTF-8 k dekódování znaků před přenosem dat do DB. To se má provést jako vlastnosti připojení JDBC, které jsou definovány jako parametry řetězce dotazu v adrese URL JDBC takto:

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

Pokud používáte zdroj dat spravovaný kontejnerem, stačí tyto vlastnosti zadat samostatně stejným způsobem, jako jste to udělali pro uživatelské jméno a heslo

useUnicode=yes
characterEncoding=UTF-8

Viz také:




  1. Vypsat soubor MySQL 5.6.10

  2. Stažení výpisu MySQL z příkazového řádku

  3. Spojení více tabulek vrátí hodnotu NULL

  4. Import velkého souboru SQL do MySql pomocí příkazového řádku