web-dev-qa-db-ja.com

mysql latin1をutf8に変換する方法

さらに開発が必要なウェブシステムを継承しました。システムは、PHPチュートリアルの2つの章を読み、コーディングできると思った人によって作成されたようです...

つまり... Webページ自体はUTF8であり、そのすべてを表示および入力します。データベーステーブルはUTF8文字セットで作成されています。ただし、設定には「SET NAMES LATIN1」があります。つまり、UTF8でエンコードされた文字列は、強制的なlatin1コーディングでデータベースに入力されます。

この混乱を実際にutf8に格納してlatin1を取り除くように変換する方法はありますか?

私は this を試しましたが、データベーステーブルがutf8に設定されているため、これは機能しません。また試してみました これ 成功しませんでした。

PHPのすべてのテーブルをlatin1エンコーディングで読み取ってから、utf8の新しいデータベースに書き戻すことでこれを行うことができるかもしれませんが、可能であれば避けたいです。

11
Moha

私はこのようなテキストフィールドで更新を実行することでそれを解決することができました:

UPDATE table SET title = CONVERT(CONVERT(CONVERT(title USING latin1) USING binary) USING UTF8)
21
Moha

データベースにローマ字以外の文字(つまり、Latin-1で表現できない文字)がすでにたくさんある場合を除いて、状況は思ったほど悪くはありません。 Latin-1はutf8の適切なサブセットです。 Webアプリはutf8で動作し、テーブルのコンテンツもutf8にあります。したがって、テーブルを変換する必要はありません。

だから、SET NAMES latin1SET NAMES utf8。 phpプログラムの接続が、接続の両端のコードと同じ文字セットで機能するようにすることで、おそらく問題を解決します。

これを読む。 http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html

2
O. Jones

列のデータ型を変更する

[〜#〜] varbinary [〜#〜]に変換すると、latin1データが自動的に変換されます

君たちありがとう。お役に立てれば幸いです。

0