mysqlで文字化け
カテゴリー:Apache
UTF8のテキストをMysql(4.1.12 )に登録するときに
set names utf8
PHP(4.3.9)上で、データを挿入するSQLの前に上のSQLを実行すると、mysqlで文字化けが発生した。
(PHP上ではなくターミナル上から実行しても同じ結果になると思われます)
データベース自体の文字コードをshow create databasde,show create tableで確認してみるとlatin1が指定されていた。
(latin1でデータベースが作られていたのはMysql をversion4.1.12にアップデートする以前の古いversionの時にデータベースを作成し、そのversionのデフォルトではデータベース作成の際にlatin1が自動指定されるようになっていたためです。)
そこでデータベースを文字コードutf8で再作成すると問題は解決した。
また"set names utf8"の1行を消しても文字化けは起こらなかった。
まとめ
挿入するデータがUTF8で
- データベースがlatin1の時 > "set names"は不要
- データベースがutf8の時 > "set names utf8"
とすると文字化けは起こらない。