何が起こったのか:
- utf8でエンコードされたデータがあります(良い)
-
SET NAMES latin1
有効でした(デフォルトですが間違っています) - 列が宣言されました
CHARACTER SET latin1
(デフォルトですが間違っています)
INSERTed
すると データは、アラビア語(クルド語/ペルシア語など)の文字の値を持たないlatin1に変換されたため、質問マークで置き換えられました。
治療法(将来のINSERTs
):
- utf8でエンコードされたデータ(良好)
-
mysqli_set_charset('utf8')
(または、クライアントがCHARACTER SET
を確立するために必要なものは何でも ) - 列やテーブルのデフォルトが
CHARACTER SET utf8
であることを確認します - Webページに表示している場合は、
<meta...utf8>
上部近くにある必要があります。
上記の説明は、CHARACTER SET
に関するものです。 、文字のエンコーディング。 COLLATION
のヒントをご覧ください 、比較と並べ替えに使用されます。
データが正しく保存されていることを再確認するには、SELECT col, HEX(col)...
を実行します。 。هرچوون
戻ってくるはずですD987E2808CD8B1DA86D988D988D986
utf8のアラビア文字の16進数は、D8xxまたはD9xxです。
(utf8mb4
utf8
と同じように機能します;どちらもアラビア語で機能します。)
悪いニュース:挿入されて「???」に変換されたデータ回復できません。