基本的に 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でつくられるので。
コンパイルするとき--default-character-set=binaryとして、create databaseのとき指定するべきだというオチだったりして。
MySQL5 ではデータベース毎はおろか、テーブル毎やカラム毎に別々の文字コードを使用することも可能です。
> --default-character-set=binaryとして、create databaseのとき指定するべき
たぶん --default-character-set=binary でコンパイルして、後は何もしないのが一番簡単(MySQL4.0 以前と同じ運用)
でも、この例のようにデータベースのキャラクタセットをujisにしてもサーバのキャラクタセットutf8に自動的に変換されてしまうのでは意味ないですよね。
どこかの設定か操作にミスがあるだけだと思いますが。
意味が有るか無いかは使い方しだいなのでなんとも。
>どこかの設定か操作にミスがあるだけだと思いますが。
チェックすべき点を教えていただけると非常に助かります。。
mysqldumpしたファイルが
create table ・・・・・
DEFAULT CHARACTER SET 'utf8'
http://dev.mysql.com/doc/refman/5.0/en/create-table.html
となってる気がする
'utf8'でテーブルが作成されるると当然
ながらクライアントから何を渡しても
最終的にujis->utf8変換で内部は'utf8'
に変換されてしまったと推定
collation_server=utf8_unicode_ci
character_set_server=utf8
You can also add
skip-character-set-client-handshake
to enforce using of utf8 encoding in db.
と書いてありますね。
クライアントもutf8とみなされちゃってるのかも。
とっちゃったほうがいいのではないですか、これ。
skip-character-set-client-handshake
そこは何度も確認したので無いですねぇ。
>> Yota さん
弊害が怖いですが、ちょっと試してみます。案外うまくいきそうな気が。。
低レベルな質問にみなさんありがとうございました。
後は自分でなんとかしたいと思います。
UTF8サーバーのUJIS DBへIMPORT
1. インポートするファイルに
/*!40101 SET NAMES ujis */;
のような記述がある場合
mysqldumpに --skip-set-charset
を指定して自動生成しないようにする。
2.mysqldumpするサーバーの[mysqld]に
skip-character-set-client-handshake
指定があると
mysqldumpに--default-character-setを
指定していも指定は無視される。
skip-character-set-client-handshake
やめる。
3.ダンプファイルの最初のテーブル生成
前に
set names ujis;
set character_set_database=ujis;
set character_set_server=ujis;
set character_set_results=NULL;
status;
show variables like "char%";
も入れる。(データは全てUJIS)
4.ダンプされたファイルの
各create tableのDEFAULT CHARSETがujis
か確認する。
=====================================
my.cnf修正
mysqldumpをするサーバーの
skip-character-set-client-handshake
は削除
Exportダンプ
mysqldump -uroot --default-character-set=binary --skip-set-charset ujisDB名 >dump.sql
or
mysqldump -uroot --default-character-set=ujis --skip-set-charset ujisDB名 >dump.sql
サーバーUTF8 Import(UJIS)
3.の修正をして
mysql importdb <dump.sql
or
mysql importdb
set names ujis;
set character_set_database=ujis;
set character_set_server=ujis;
set character_set_results=NULL;
status;
show variables like "char%";
source dump.sql;
詳細にありがとうございます!ポイントあげれなくて申し訳ないです。。
別に mysqld 用意してとりあえず逃げておいたのですが、明日にも検証してみたいと思います。