0

私のデータベースには、非常に奇妙に見える値を持つ 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

どんな種類の助けも大歓迎です。ありがとうございました!

4

1 に答える 1

1

列のエンコーディングは 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 変換を実行する関数を定義し、元のデータが正常であることを検出し、そうでない場合にのみ変換されたバージョンを返し、それを使用して更新を行うことができます。

于 2012-08-03T12:44:00.603 に答える