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

mysql:9580

From: <takeshi@xxxxxxxxxx>
Date: Wed, 09 Jun 2004 09:39:28 +0900
Subject: [mysql 09580] Re: MySQL 4.1.2 の日本語の扱い

村上です。

At Wed, 9 Jun 2004 08:05:25 +0900,
とみたまさひろ wrote:
> 
> とみたです。
> 
> On Mon, 07 Jun 2004 19:25:07 +0900
> takeshi@xxxxxxxxxx wrote:
> 
> > ■3. どうすべき/どうあるべきか?
> > a. 自動変換はいるのか要らないのか
> > b. デフォルトで自動変換を ON にすべきか否か
> > c. mysql, myswldump 等のデフォルトの振る舞いをどうすべきか
> 
> > 自動変換をスキップするオプションを追加するか、
> > デフォルトでは自動変換をしない仕様にして、変換したいときにオプションを追加するようにするか、
> > 自動変換そのものを削除するか、
> > ./configure 時のデフォルトに、クライアントも従うようにさせるか、

> 「自動変換しない」という特別な charset を作ればいいような気もします。
> --default-character-set=noconv とか。

それはいい手ですね。

> configure 時に指定した --with-charset はクライアントでも有効になるべき
> でしょう。--with-client-charset とかオプションをつけてもいいかも。

これは有効になるべきだと思います。

今のままだと、クライアントに設定するか接続時に余分なSQL文の実行をしないと
文字が壊れて返ってくるので、3.x, 4.0 までのユーザーが upgrade したときに、
不良とか壊れたとか思っても仕方がない

> そうすれば、configure --with-client-charset=noconv として作成されたク
> ライアントを使用すれば従来通りになるんじゃないかと。

その時、サーバーは勝手に自動変換をしないようにしておけばいいですね。
(? にするとか、フィールドのキャラクタセットに変換するとかを止めさせる)

t1. --default-character-set=noconv 導入。(サーバー、クライアント共に)
t2. クライアントは configure 時のキャラクタセットの指定を、
    デフォルトのキャラクタセットとして使用すべき
t3. クライアント configure 時のオプション --with-client-charset=noconv を導入。
    これはクライアントが使用するデフォルトのキャラクタセットの指定。
t4. クライアントが --default-character-set=noconv でサーバーに接続してきたとき、
    サーバーは決して文字を自動変換しない。
    クライアントから受け取った文字はそのままストレージエンジンに書き
    ストレージエンジン内の文字をクライアントに返す時もそのまま返す。

あと出た意見のなかで

a1. クライアントに、サーバーのキャラクタセットに自動で従わせるオプションをつける

a2. サーバーに自動変換を止めさせるオプションをつける。--skip-conv とか
    サーバーは決して文字を自動変換しない。
    クライアントから受け取った文字はそのままストレージエンジンに書き
    ストレージエンジン内の文字をクライアントに返す時もそのまま返す。

クライアントが noconv の時の escape 処理は別の問題として考える。
ujis なら別段問題はなさそうだけど、SJIS 対応は考えないとならない


mysql.cc と mysqldump.c では、たった一つの変数の値を入れ替えるだけの変更で
とりあえずはコンパイル時の指定をデフォルトにして動きます。(後述)

しかし、mysql.cc とか、mysqldump.c とか、それぞれのクライアントを
変更する状態よりも、libmysqlclient14 そのものに、
デフォルトのキャラクタセットを埋め込んでおいた方がよさそう。

t5. クライアントが使用するデフォルトのキャラクタセットは、libmysqlclient14 に埋めておく


==現行での対処==
mysql.cc は
              default_charset_used= 0, opt_secure_auth= 0,
を
              default_charset_used= 1, opt_secure_auth= 0,
に変更。リコンパイル

mysqldump.c は
static char *default_charset= (char*) MYSQL_UNIVERSAL_CLIENT_CHARSET;
を
static char *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME;
に変更。リコンパイル

PHP の mysql.c は
mysql_real_connect() の前に、
mysql_options(&mysql->conn, MYSQL_READ_DEFAULT_GROUP, "php");
を入れて、/etc/my.cnf の [php] グループを読ませるようにし、リコンパイル。
/etc/my.cnf の [php] グループで default-character-set 指定。

MySQL/Ruby(libmysqlclient ラッパ)モジュールの場合は、
MySQL/Ruby モジュールのソースを変更する必要は無く、
Ruby スクリプトの方に、Mysql#options() メソッドを追加。

クライアント毎に対処してたら大変

================
村上毅 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>]