MYSQLを利用していて主に文字コードの問題が出ることがあって、それを解決、もしくは文字化けなどが起きなようにするためのメモ。
サーバの文字コード設定を見る
サーバの文字コードの状態を見るには以下のコマンドを実行する。
show variables like "chara%";
何も設定していないと以下のような状態みたい。
+--------------------------+----------------------------+
| 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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
これで、character_set_database
とcharacter_set_server
がともにlatin1になっている。このため日本語などを使うと文字化けを起こす。
サーバでの設定
my.cnfで設定する。
[mysqld_safe]
default-character-set = utf8
:
[mysqld]
:
character-set-server = utf8
これでサーバを再起動する。
ただ、[mysqld]
に default-character-set = utf8
を設定するとサーバが起動したない。
DATABASEやTABLEの文字コードを変更する場合。
サーバ設定を変更する前にDATABASEやTABLEを作成すると文字コード設定がlatin1のままだったりする。drop
して設定し直すということもできるが、DATABASEやTABLEだけ変更することができる。
DATABASEを変更する場合は以下のようにする。
alter database sampledb character set utf8;
TABLEの文字コードを変更する場合は以下のようにする。
alter table character set utf8;
DATABASEやTABLEの文字コードを確認するには以下のコマンドを実行する。
show create database sampledb;
show create table sampletable;
OpenOffice/LibreOfficeと接続する場合
Connecterを利用すれば良いのだけれど、文字コードはやはり注意する必要があるようだ。特にWindowsでOpenOfficeを使用した場合utf8ではうまくいかなかった。正確にはサーバ側はutf8で統一して問題はないのだけれと、Windows側でutf8をセットしても表示はできても、入力時に文字化けを起こしたりした。解決方法は以下の通り。
ODBC設定側のConnecterタブにあるCharacter setにcp932をセット。ついで、OpenOffice側のデータベースプロパティで文字コードにShift-JISをセットする。以上で回避できた。
これをどちらにもutf8をセットしてもうまく動作はしてくれなかった。