基本的に UTF-8 のエンコードで利用しているサーバに EUC-JP のデータベースを作成し、データをインポートしたいのですが、EUC-JP ではなく UTF-8 でインポートされてしまいます。
どのように設定すれば EUC-JP のままデータをインポートできるでしょうか。
my.cnf:
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake
mysql> status;
--------------
mysql Ver 14.12 Distrib 5.0.24a, for pc-linux-gnu (i486) using readline 5.1
Server version: 5.0.24a-Debian_9-log
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: ujis
Client characterset: ujis
Conn. characterset: ujis
mysql> show variables like "char%";
| character_set_client | ujis |
| character_set_connection | ujis |
| character_set_database | ujis |
| character_set_filesystem | binary |
| character_set_results | ujis |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
データベースを作るとき
>CREATE DATABASE hoge DEFAULT CHARACTER SET ujis ;
でどうでしょう。
指定しなければutf8でつくられるので。
character_set_database が ujis であるならば、変換されるので UTF-8 での格納は基本的には無理。
set names ujis;
これはクライアント側のコード指定なので、サーバーに格納される文字コードとは直接関係が無い。
失礼ですが、何を持って UTF-8 でインポートされていると判断したのかをお伺いしたい。
skip-character-set-client-handshake 設定しても変換が行なわれるということですか?
UTF-8 なサーバに EUC-JP なデータベースを作成し、EUC-JP なデータをインポートしたいんです。
なぜそう判断したかというと、GNU screen のエンコードを変更すると UTF-8 では正しく表示されますが、EUC-JP だと化けてしまうためです。
利用するWebアプリでも化けてしまっているので間違いないだろう、と。。
ここがくわしいです。注意点としてはコンパイル時にbinaryが指定してあること、phpmyadminは選んだ文字コードに変換して画面表示するのであてにならないこと、です。
skip-character-set-client-handshake 設定しても変換が行なわれるということですか?
これはクライアントが使用する文字コードの設定を一律にサーバーの文字コードの設定と同じにすると言う事です。
変換自体は必要に応じて行われます。
mysqldump でダンプしたファイル自体の文字コードはどうなっていますか?
なるほど…勉強になります。
ファイルのエンコードは問題なくEUC-JPになっています。念のためエディタで変換してみても結果は同じでした。
character_set_database ujisでも
character_set_server utf8なら無意味ということですね。
それでは、ujis用のmy.cnfを作っておいてサーバーを起動するというのはどうでしょう。
$mysqld_safe --defaults-file=/etc/my_ujis.cnf &
そのようですね…。
ただ、これだと別のポートで起動する必要がありますよね?あくまでメインは UTF-8 なので。
>skip-character-set-client-handshake
サーバ既定動作で動くだけで変換しない
わけではない。
http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html
確認する場合は
SET character_set_results = NULL;
該当データをインポート元のデータベース
のテーブルの文字セットはujisですか?
show create table テーブル名
すみません、文字数で怒られたので削ったのですが、その辺は一通り試しています。
コメントに書いておくべきでした。
mysqldump したファイルにも set names ujis を追記してインポートを試しています。