2

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örbyUTF8文字であるようです。つまり、MySQL は の UTF8 文字列を受け取り、そのまま保存しています。次の例では、最初のエントリが古いエントリの 1 つであり、2 番目のエントリは " " をデータベースに挿入し、すべてを UTF8 に設定しています:HörbyÃHörbyHö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 レコードすべてを再入力することは現実的ではありません。

4

2 に答える 2

5

以前にutf8エンコードされた文字列を列に保存し、latin1その列を に変換したようutf8です。それを修正するには:

  1. データを次のように変換しますlatin1

    ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET latin1;
    
  2. データを変更せずに列タイプを UTF-8 に変更します (経由binary):

    ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET binary;
    ALTER TABLE cities MODIFY name varchar(255) CHARACTER SET utf8;
    
于 2012-06-04T20:48:23.170 に答える
0

REPLACEこの関数は MYSQL で使用できます。

何かのようなもの -

`UPDATE cities
 SET name = REPLACE(name, 'ö', 'ö');`
于 2012-06-04T20:41:32.020 に答える