私のデータベースには、非常に奇妙に見える値を持つ 1,000 を超えるレコードがあります。
Lưu BÃch vá» Việt Nam là m liveshow
ただし、それらをutf-8で表示すると、問題なく読みやすいように見えます。これらすべてをmysql内で次のように見えるut8に即座に変換するにはどうすればよいですか:
Lưu Bích về Việt Nam làm liveshow
どんな種類の助けも大歓迎です。ありがとうございました!
列のエンコーディングは utf8 であると仮定します。そうでない場合は、latin1 に Việt に必要な文字がないため、変更してください。
この時点で、列に表示されているのは、二重に UTF-8 でエンコードされたテキストです。すべてのテキストがこれと同じ方法でマングルされている場合は、列のタイプを最初に latin1 テキストに変更し、次に blob、次に utf8 テキストに変更することで、この問題を解決できます。ただし、列内のデータの一部が単独でエンコードされている場合は、壊れた値を検出してそれらのみを更新する必要があります。この update ステートメントはそれを試みます:
update mytable set mycolumn = @txt where char_length(mycolumn) =
length(@txt := convert(binary convert(mycolumn using latin1) using utf8));
または、「安全な」 utf-8 変換を実行する関数を定義し、元のデータが正常であることを検出し、そうでない場合にのみ変換されたバージョンを返し、それを使用して更新を行うことができます。