データベース全体 (またはテーブル全体) が影響を受ける場合は、最初に、Latin1-as-UTF8 文字セットの問題であることを確認できますSET NAMES Latin1
。
mysql> select txt from tbl;
+-----------+
| txt |
+-----------+
| Québec |
| Québec |
+-----------+
2 rows in set (0.00 sec)
mysql> SET NAMES Latin1;
Query OK, 0 rows affected (0.00 sec)
mysql> select txt from tbl;
+---------+
| txt |
+---------+
| Québec |
| Québec |
+---------+
2 rows in set (0.00 sec)
これが検証された場合、つまり、デフォルトの文字セット Latin-1 を使用して目的のデータを取得した場合は、テーブル全体を強制的にダンプして、文字セットの仕様が間違っていても--default-character-set=latin1
正しいデータでファイルが作成されるようにすることができます。
しかし、今ではヘッダー行を次のように置き換えることができます
/*!40101 SET NAMES latin1 */;
UTF8で。データベースを再インポートすれば完了です。
一部の行のみが影響を受ける場合は、さらに困難になります。
SELECT txt, CAST(CAST(txt AS CHAR CHARACTER SET Latin1) AS BINARY) AS utf8 FROM tbl;
+-----------+---------+
| txt | utf8 |
+-----------+---------+
| Québec | Québec |
+-----------+---------+
1 row in set (0.00 sec)
...しかし、影響を受ける行を見つけるのに問題があります。あなたが見つけるかもしれないいくつかのコードポイント
WHERE txt LIKE '%Ã%'
他のものについては、手動でサンプリングする必要があります。