悪いニュース。ただし、最初に再確認してください:
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を使用します 。