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

mysql:9687

From: <takeshi@xxxxxxxxxx>
Date: Fri, 18 Jun 2004 09:40:42 +0900
Subject: [mysql 09687] Re: MySQL 4.1.2 の日本語の扱い

村上です。

At Sat, 12 Jun 2004 21:55:13 +0900,
とみたまさひろ wrote:
> 
> とみたです。

> mysqldump の場合は、あえて UTF-8 にしているのではないかという気がします。
> 
> たとえば、ujis でコンパイルされた mysqldump が、サーバ上の UTF-8 デー
> タを勝手に EUC-JP に変換してしまうと、元に戻せない事態が発生します。だ
> から、すべての charset のデータを保持できる UTF-8 を使用しているとか…。

おそらくそんなところです。

マッピングが食い違っている文字がありますが、それはとりあえず無視。
# 本当に utf-8-java とか utf-8-ms とか必要になってくるのではないか、と個人的には思います

> > 残るテーマですが、
> >   '自動変換いる?いらない?'
> > です。
> 
> あれば結構便利だと思います。
> 
> 問題となる場合でも、クライアントから「変換しないで欲しい」ということを
> サーバに伝えることができれば、今まで通り使用できると思うので、あまり問
> 題にはならないと思うので、charset=noconv は導入して欲しいところです。

実は、4.1.2 では、
1. binary キャラクタセット
2. --init-connect オプション
というのが導入されていました。

mysql --default-character-set=binary
とすると
| client binary | <--> | server ujis |
の環境の場合、ORDER BY, LIKE は ujis できちんと扱われます。
クライアントには、文字(バイト列) をそのまま流します。

クライアントが接続してきたときに、最初にクエリを実行するオプションも導入されていました。
サーバー側に、
--init-connect='SET AUTOCOMMIT=0 ; SET NAMES binary'
というオプションを与えると、クライアントが接続したときに、自動的に
SET AUTOCOMMIT=0 ; SET NAMES binary   が実行されます。
ただし、接続するユーザーには「SUPER 権限が無いこと」という条件付きです。


1. libmysqlclient にデフォルトのキャラクタセットが埋め込まれた(4.1.3から)
2. --default-character-set=binary で、noconv の動きが実現できる
3. サーバー側で、自動変換を抑止する方法がある。--init-connect='SET NAMES binary' を使う。

ということで、

A1. サーバーに init-connect をつけて、全ての場合においてクライアントを binary で動かすようにする
A2. MS-Win 用のクライアントバイナリ(PHP,Perl等)は、
    メンテナに「libmysql は binary でコンパイルして」という要求を上げておく
という解決方法で、今までのアプリケーションを書き直すことは少なくなり、
文字が破壊される場合も少なくなったはず。

今後新たにバイナリやアプリを作る場合は、
4.1 を視野に入れて、アプリに SET 文とか入れればいいでしょう。


ただ、client=binary  / table(server) = sjis の時、
エスケープ処理がどうなるかは、まだ私の方では未検証です。
MS プラットフォームで動かしている場合、これは避けて通れないので、
検証していただける方が多ければ多いほどたすかります



また、クライアントに対する
./configure --with-client-charset=binary
ですが、
以下が 4.1.3 前の(今はbitkeeerに入っている)ものに対する簡単なパッチです.

またこれが必要な場合ですが、どういう場面で使うでしょうか?
私は次のように考えています
1. 上の mysqld --init-connect をしなくても、設定無しで 4.0, 3.X までと同様に動く
2. デフォルトで文字が壊れるとかのトラブルに遭遇しなくなる
3. バイナリを作成する人が、サーバー用とクライアント用の2回コンパイルする必要が無い
他ありますか?

#パッチをMySQLのソースに入れるにしても、説得材料が必要なのです.

以上、宜しくお願い致します
================
村上毅 takeshi@xxxxxxxxxx


==== パッチ ====
diff -ru mysql-4.1.2-alpha-20040615.orig/include/my_global.h mysql-4.1.2-alpha-20040615-1/include/my_global.h
--- mysql-4.1.2-alpha-20040615.orig/include/my_global.h	2004-06-08 16:16:09.000000000 +0900
+++ mysql-4.1.2-alpha-20040615-1/include/my_global.h	2004-06-17 17:50:55.000000000 +0900
@@ -1194,6 +1194,10 @@
 #define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME
 #endif
 
+#ifndef MYSQL_CLIENT_DEFAULT_CHARSET_NAME
+#define MYSQL_CLIENT_DEFAULT_CHARSET_NAME MYSQL_DEFAULT_CHARSET_NAME
+#endif
+
 #if defined(EMBEDDED_LIBRARY) && !defined(HAVE_EMBEDDED_PRIVILEGE_CONTROL)
 #define NO_EMBEDDED_ACCESS_CHECKS
 #endif
diff -ru mysql-4.1.2-alpha-20040615.orig/sql-common/client.c mysql-4.1.2-alpha-20040615-1/sql-common/client.c
--- mysql-4.1.2-alpha-20040615.orig/sql-common/client.c	2004-06-11 09:39:19.000000000 +0900
+++ mysql-4.1.2-alpha-20040615-1/sql-common/client.c	2004-06-17 17:50:21.000000000 +0900
@@ -1836,7 +1836,7 @@
   /* Set character set */
   if (!mysql->options.charset_name &&
       !(mysql->options.charset_name= 
-       my_strdup(MYSQL_DEFAULT_CHARSET_NAME,MYF(MY_WME))))
+       my_strdup(MYSQL_CLIENT_DEFAULT_CHARSET_NAME,MYF(MY_WME))))
     goto error;
   
   {
diff -ru mysql-4.1.2-alpha-20040615.orig/config.h.in mysql-4.1.2-alpha-20040615-1/config.h.in
--- mysql-4.1.2-alpha-20040615.orig/config.h.in	2004-05-29 04:38:07.000000000 +0900
+++ mysql-4.1.2-alpha-20040615-1/config.h.in	2004-06-17 18:03:08.000000000 +0900
@@ -22,6 +22,8 @@
 /* Define the default charset name */
 #undef MYSQL_DEFAULT_CHARSET_NAME
 
+#undef MYSQL_CLIENT_DEFAULT_CHARSET_NAME
+
 /* Define the default charset name */
 #undef MYSQL_DEFAULT_COLLATION_NAME
 
diff -ru mysql-4.1.2-alpha-20040615.orig/configure.in mysql-4.1.2-alpha-20040615-1/configure.in
--- mysql-4.1.2-alpha-20040615.orig/configure.in	2004-06-16 11:34:38.000000000 +0900
+++ mysql-4.1.2-alpha-20040615-1/configure.in	2004-06-17 18:06:21.000000000 +0900
@@ -2332,6 +2332,7 @@
 
 AC_DIVERT_PUSH(0)
 
+define(CHARSETS_AVAILABLE0,binary)
 define(CHARSETS_AVAILABLE1,ascii armscii8 ascii big5 cp1250 cp1251 cp1256 cp1257)
 define(CHARSETS_AVAILABLE2,cp850 cp852 cp866 dec8 euckr gb2312 gbk)
 define(CHARSETS_AVAILABLE3,greek hebrew hp8 keybcs2 koi8r koi8u)
@@ -2341,6 +2342,7 @@
 DEFAULT_CHARSET=latin1
 CHARSETS_AVAILABLE="CHARSETS_AVAILABLE1 CHARSETS_AVAILABLE2 CHARSETS_AVAILABLE3 CHARSETS_AVAILABLE4 CHARSETS_AVAILABLE5"
 CHARSETS_COMPLEX="big5 cp1250 euckr gb2312 gbk latin1 latin2 sjis tis620 ucs2 ujis utf8"
+DEFAULT_CLIENT_CHARSET=binary
 
 AC_DIVERT_POP
 
@@ -2355,6 +2357,18 @@
    [default_charset="$withval"],
    [default_charset="$DEFAULT_CHARSET"])
 
+AC_ARG_WITH(client-charset,
+   [  --with-client-charset=CHARSET
+                          Default client character set, use one of:
+			  CHARSETS_AVAILABLE0
+                          CHARSETS_AVAILABLE1
+                          CHARSETS_AVAILABLE2
+                          CHARSETS_AVAILABLE3
+                          CHARSETS_AVAILABLE4
+                          CHARSETS_AVAILABLE5],
+   [default_client_charset="$withval"],
+   [default_client_charset="$default_charset"])
+
 AC_ARG_WITH(collation,
    [  --with-collation=COLLATION
                           Default collation],
@@ -2671,6 +2685,7 @@
 fi
 
 AC_DEFINE_UNQUOTED(MYSQL_DEFAULT_CHARSET_NAME,"$default_charset")
+AC_DEFINE_UNQUOTED(MYSQL_CLIENT_DEFAULT_CHARSET_NAME,"$default_client_charset")
 AC_DEFINE_UNQUOTED(MYSQL_DEFAULT_COLLATION_NAME,"$default_collation")
 
 MYSQL_CHECK_ISAM





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

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