悪いニュース。ただし、最初に再確認してください:
SELECT col, HEX(col)...
テーブルの内容を確認します。ヘクスが3F
を示している場合 、その後、データは失われます。正しく保存されたdal
文字は16進数である必要がありますD8AF
; hah
16進数のD8AD
。
何が起こったのか:
- utf8でエンコードされたデータがあります(良い)
-
SET NAMES latin1
有効でした(デフォルトですが間違っています) - 列が宣言されました
CHARACTER SET latin1
(デフォルトですが間違っています)
INSERTed
すると データは、ペルシア語の文字の値を持たないlatin1に変換されたため、質問マークで置き換えられました。
治療法(将来の `INSERTSの場合):
- 非推奨のmysql_*インターフェースの代わりにmysqli_*インターフェースを使用してアプリケーションを再コーディングします。
- utf8でエンコードされたデータ(良好)
- mysqli_set_charset('utf8')
- 列やテーブルのデフォルトが
CHARACTER SET utf8
であることを確認します - Webページに表示している場合は、
<meta...utf8>
上部近くにある必要があります。
上記の説明は、CHARACTER SET
に関するものです。 、文字のエンコーディング。 COLLATION
のヒントをご覧ください 、比較と並べ替えに使用されます。
これらを同等に扱いたい場合:'بِسْمِ' ='بسم'、COLLATION
に(utf8_general_ciの代わりに)utf8_unicode_ciを使用します 。