83's

Top > Archives > 2006 > September > 22 > MySQLの文字コードに関するメモ

MySQLの文字コードに関するメモ

ろくな知識もなくデータベース使ってるもんだからいろいろわかんない。良くないすなぁ。

とりあえず最近アウトプットが少ないので、初心に帰って調べたことをメモ。

MySQLは4.1からcharとかvarcharとかのあとについてる数字(char(10)の10)がバイト数から文字数になったと聞いていたのに文字が変なところでチョン切られるからおかしいなあと思っていた。

ちょっと調べてみた中で目にした関数を試しに使ってみると、文字数を返すはずのcharacter_length()でバイト数みたいな数字が返ってくるし、charset()をするとlatin1って返ってくるもんだから、あー、これutf8じゃないよ……という結論になった。

まーデータ自体はutf8のコードで保存されているんだろうけど、MySQL内での扱いがlatin1ってことかな。Railsでもmysqlでも化けなかったってことは。

mysql> show variables like "char%";
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

mysql:9586によると、character_set_databaseてのがCREATE DATABASE で文字コードが指定されなかった場合、database の文字コードはこれになる。ということなので、ああ確かにオレのはlatin1になるな、と。

my.cnfの[mysqld]のところにdefault-character-set=utf8と書いておけば良さそうですよ。

クライアント側はサーバと別の文字コードを使うことが出来て、これが

mysql --default-character-set=utf8

とか

mysql> set names utf8

とかで変更できるそうだ。ふむふむ。

使える文字コード一覧は、

mysql> show character set;

euc-jpをujisと書いたりするから注意、と。

日本語が入るとmysqlコマンドで表を出力したときに罫線がずれてたんだけど、これはこの文字コードにからんだ問題だったみたい。(参考:mysqlのオプション指定でテーブルの縦線を揃える

さて、これでMySQLの理解が一つ深まったんだけど、問題はすでにあるデータベース。

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

肝心のcharacter_set_databaseがlatin1のままだよママン(´Д⊂)

変え方がわからないので、mysqldumpして create tableにdefault character setを追加してリストアしてutf8になりました。

Trackbacks

Trackback Ping URL: http://fg-180.katamayu.net/trackback/352

検索結果が正しくない / あんじーのテクニカルブログ

なぜか「中」を含む文字列を調べようとしているのに、「団」とか「台」が検索されてし......(Sat Feb 09 01:02:16 JST 2008)

more

Comments

通りすがり (2007/06/19 14:52:10)

alter database 〜DB名 character set utf8

で変更できますよ〜

yazu (2007/06/19 16:11:46)

>通りすがりさん

alter database!
これは知りませんでした。ありがとうございます。

http://とかhttps://が入ってるとPOSTできません。ttp://のように適宜変えてください。