さらに開発が必要なウェブシステムを継承しました。システムは、PHPチュートリアルの2つの章を読み、コーディングできると思った人によって作成されたようです...
つまり... Webページ自体はUTF8であり、そのすべてを表示および入力します。データベーステーブルはUTF8文字セットで作成されています。ただし、設定には「SET NAMES LATIN1」があります。つまり、UTF8でエンコードされた文字列は、強制的なlatin1コーディングでデータベースに入力されます。
この混乱を実際にutf8に格納してlatin1を取り除くように変換する方法はありますか?
私は this を試しましたが、データベーステーブルがutf8に設定されているため、これは機能しません。また試してみました これ 成功しませんでした。
PHPのすべてのテーブルをlatin1エンコーディングで読み取ってから、utf8の新しいデータベースに書き戻すことでこれを行うことができるかもしれませんが、可能であれば避けたいです。
私はこのようなテキストフィールドで更新を実行することでそれを解決することができました:
UPDATE table SET title = CONVERT(CONVERT(CONVERT(title USING latin1) USING binary) USING UTF8)
データベースにローマ字以外の文字(つまり、Latin-1で表現できない文字)がすでにたくさんある場合を除いて、状況は思ったほど悪くはありません。 Latin-1はutf8の適切なサブセットです。 Webアプリはutf8で動作し、テーブルのコンテンツもutf8にあります。したがって、テーブルを変換する必要はありません。
だから、SET NAMES latin1
〜SET NAMES utf8
。 phpプログラムの接続が、接続の両端のコードと同じ文字セットで機能するようにすることで、おそらく問題を解決します。
これを読む。 http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html
列のデータ型を変更する
[〜#〜] varbinary [〜#〜]に変換すると、latin1データが自動的に変換されます
君たちありがとう。お役に立てれば幸いです。