[前][次][番号順一覧][スレッド一覧]

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>]