現在設定されてる charset の確認方法
mysql> show variables like 'cha%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec)
ubuntuでMySQLを普通にapt-getで入れた状態だとこんな感じ。
設定変更
“SET NAMES UTF8;” というクエリを発行すると、
character_set_client, character_set_connection, character_set_results をutf8 に
切り替えることが出来る。
アプリケーションから DB接続直後にこのクエリは昔は定番だったけども
セキュリティ上の問題があるので現在は非推奨、つかぶっちゃけ使用禁止。
http://blog.ohgaki.net/set_namesa_mcb_asc
php だったら mysqli_set_charset( $db, “utf8″ ); とか、
“SET NAMES”を使わずに専用の api からやること。
my.conf
上記対応をしても character_set_server や character_set_database は変わらずに
Latin1 のまま。
/etc/mysql/my.cnf を編集して、mysqld のところに
character-set-server=utf8 # ここを追加 by sayoko skip-character-set-client-handshake # これも
以上を追加。そして MySQL を再起動。
※ my.cnfの書式 mysql 5.3あたりで変わってるので要確認。
ubuntuのは Ver 5.1.49-1ubuntu8.1-log for debian-linux-gnu on x86_64 ((Ubuntu))
だったりする。
もう一度確認
mysql> show variables like 'cha%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
ここまでやっても character_set_database だけは latin1 のまま。
これは既存のデータベースがすでに latin1で作成されているので。
データが少ない初期状態のうちなら、データベースを新規に作り直した方が早い。
create table bbs (
postno int unsigned auto_increment not null,
...
msg varchar(1024),
addr char(128),
PRIMARY KEY(postno)
) default character set utf8;
こんな感じで create table する段階で utf8指定する。
もちろん create database の段階で指定してもいい。
すでにあるDBは
alter database (db-name) character set utf8
中華パッド Flytouch 3




