ノリブログ?

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"

とすると文字化けは起こらない。