OK、MySQL (5.1.61) データベースが UTF8、テーブルが UTF8、フィールドが UTF8、MySQL クライアントの文字セットが UTF8 に設定されていることを確認しました。UTF8 エントリを正常に保存および取得できます。また、端末のエンコーディングが UTF8 に設定されていることも確認しました。
CREATE TABLE `cities` (
`name` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
データベースに既に存在する 200,000 エントリの問題。私たちがプロジェクトを継承した人々は、多くのエンコーディングをめちゃくちゃにして、実際には where のような文字列を保存し、有効なHörby
UTF8文字であるようです。つまり、MySQL は の UTF8 文字列を受け取り、そのまま保存しています。次の例では、最初のエントリが古いエントリの 1 つであり、2 番目のエントリは " " をデータベースに挿入し、すべてを UTF8 に設定しています:Hörby
Ã
¶
Hörby
Hörby
mysql> INSERT INTO cities SET name = 'Hörby';
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM cities;
+----------+
| name |
+----------+
| Hörby | <--- old entry
| Hörby | <--- new entry
+----------+
押しつぶされたキャラクターを元のキャラクターに戻すにはどうすればよいでしょうか? この時点で、何かを行う準備がほぼ整いましたが、200,000 レコードすべてを再入力することは現実的ではありません。