mysql:9547
From: <takeshi@xxxxxxxxxx>
Date: Mon, 07 Jun 2004 19:25:07 +0900
Subject: [mysql 09547] Re: MySQL 4.1.2 の日本語の扱い
村上です。 今のままで beta 以上のリリースになったら面倒が起きそうなので、 この件は、いろいろな意見をフィードバックしたいと思っています。 At Fri, 4 Jun 2004 01:51:52 +0900, とみたまさひろ wrote: > さて、この変換機能は便利なのでしょうか。それとも、余計なお世話的で不便 > なのでしょうか。 とみたさんのテストを私なりに追試し、整理してみました。 ■0. とみたさんのテスト mysqld サーバーの default-character-set は、Version 4.1.2 の場合、 CREATE TABLE ..... DEFAULT CHARSET= に反映されるので、これは、テーブルのキャラクタセットと見ることができるとすると、 考える変数は、 テーブルのキャラクタセット latin1 / ujis mysql のキャラクタセット latin1 / ujis MYD ファイル内の文字コード 【結果】 [扱う文字が ujis の時] TABLE の charset | latin1 ujis --------------------------------------- mysql(latin1) INSERT | B Y mysql(latin1) SELECT | B Z mysql(ujis) INSERT | X A mysql(ujis) SELECT | B A 「mysql(latin1) INSERT」 は、mysql クライアントを latin1 で動かして、ujis 文字を INSERT するという意味 結果のアルファベットの意味は: A --- OK B --- OK。ただし、ORDER が狂うことがある。 X --- 文字破壊。 '?' になる Y --- 文字破壊。 ujis 文字を latin1 としてみたてて、それを ujis 変換した値にする Z --- 文字破壊。 MYD ファイルに ujis で記録されている文字は壊れて返る。(?になるか壊れるか) Y の状況で INSERT した文字は正しく返ることがあるので、一見 正常のように勘違いする。 なお、 MySQL 4.1.2 を ./configure --with-charset=ujis でコンパイルしても、 mysql コマンドは ./configure --with-charset=latin1 でコンパイルされた物と 同じ動きをした。 mysql コマンドに常に --default-character-set=ujis が必要になる。 ■1. mysqldump の問題 ●1-1. mysqldump クライアント(./configure --with-charset=ujisでコンパイル) を オプション無しで実行した結果 % mysqldump --skip-opt -t test | grep INSERT INSERT INTO `t4` VALUES (もじばけ , もじばけ); # 文字化けの部分は UTF になっている % mysqldump --skip-opt -t test | grep INSERT | lv -Iu8 -Oej INSERT INTO `t4` VALUES ('あいうえお', 'あいうえお'); ●1-2. mysqldump クライアント(./configure --with-charset=ujisでコンパイル) を、 --default-character-set=ujis オプションを使用して実行 % mysqldump --default-character-set=ujis --skip-opt -t test | grep INSERT INSERT INTO `t4` VALUES ('あいうえお', 'あいうえお'); ■2. 他のクライアントも問題 PHP, Ruby など、limmysqlclient14 をリンクし直すと、 mysql コマンドのような、日本語文字が?になる現象が起きる。 Ruby は mysql_option() 関数をコールしているので、 my.cnf ファイルに default-characer-set オプションを指定できる PHP は、mysql_option() 関数をコールしていないので、 default-character-set オプションが使えない。 # PHP の mysql モジュールのソースを変更すれば OK ■3. どうすべき/どうあるべきか? a. 自動変換はいるのか要らないのか b. デフォルトで自動変換を ON にすべきか否か c. mysql, myswldump 等のデフォルトの振る舞いをどうすべきか 自動変換をスキップするオプションを追加するか、 デフォルトでは自動変換をしない仕様にして、変換したいときにオプションを追加するようにするか、 自動変換そのものを削除するか、 ./configure 時のデフォルトに、クライアントも従うようにさせるか、 他ありますか? 以上、宜しくお願い致します ================ 村上毅 takeshi@xxxxxxxxxx
9530 2004-06-03 23:28 [とみたまさひろ <tomm] MySQL 4.1.2 の日本語の扱い 9531 2004-06-04 01:51 ┗[とみたまさひろ <tomm] 9533 2004-06-04 08:26 ┣[SUGAWARA Hajime <sug] -> 9547 2004-06-07 19:25 ┗[<takeshi@xxxxxxxxxx>] 9550 2004-06-07 21:09 ┣["Ryuichiro Munechika] 9556 2004-06-07 22:02 ┃┗[SUGAWARA Hajime <sug] 9573 2004-06-08 11:51 ┃ ┗[Hirofumi Fujiwara <f] 9586 2004-06-10 02:48 ┃ ┗["HIROSE, Masaaki" <h] 9628 2004-06-13 21:50 ┃ ┗[Hirofumi Fujiwara <f] 9578 2004-06-09 08:05 ┣[とみたまさひろ <tomm] 9580 2004-06-09 09:39 ┃┗[<takeshi@xxxxxxxxxx>] 9592 2004-06-11 05:04 ┗[<shuichi@xxxxxxxxxx>] 9596 2004-06-11 11:00 ┣[<shuichi@xxxxxxxxxx>] 9598 2004-06-12 00:16 ┗[<takeshi@xxxxxxxxxx>] 9611 2004-06-12 21:55 ┗[とみたまさひろ <tomm] 9687 2004-06-18 09:40 ┗[<takeshi@xxxxxxxxxx>] 9699 2004-06-23 09:41 ┣[<takeshi@xxxxxxxxxx>] 9728 2004-07-01 11:18 ┗[<takeshi@xxxxxxxxxx>] 9756 2004-07-02 21:14 ┗[<takeshi@xxxxxxxxxx>] 9808 2004-07-10 16:55 ┗[<takeshi@xxxxxxxxxx>] 9839 2004-07-13 14:26 ┗[Shuichi Tamagawa <sh] 9842 2004-07-13 15:12 ┣[Hirofumi Fujiwara <f] 9848 2004-07-14 09:35 ┃┗[<shuichi@xxxxxxxxxx>] 9850 2004-07-14 09:56 ┃ ┗[<takeshi@xxxxxxxxxx>] 9852 2004-07-14 12:25 ┃ ┗[Hirofumi Fujiwara <f] 9854 2004-07-14 13:39 ┃ ┣[<takeshi@xxxxxxxxxx>] 9858 2004-07-14 15:31 ┃ ┃┗[Hirofumi Fujiwara <f] 9860 2004-07-14 16:35 ┃ ┃ ┣[<takeshi@xxxxxxxxxx>] 9867 2004-07-16 02:16 ┃ ┃ ┗[Shuichi Tamagawa <sh] 9863 2004-07-15 11:34 ┃ ┗[<shuichi@xxxxxxxxxx>] 9847 2004-07-14 08:52 ┗[<shuichi@xxxxxxxxxx>] 9849 2004-07-14 09:39 ┗[<takeshi@xxxxxxxxxx>]