mysql:9229
From: "Matsunobu, Yoshinori" <"Matsunobu, Yoshinori" <Yoshinori.Matsunobu@xxxxxxxxxx>>
Date: Sat, 17 Apr 2004 00:43:55 +0900
Subject: [mysql 09229] Re: 半角カタカナのコード変換
松信と申します。 初投稿です。今後ともよろしくお願い申し上げます。 > 「実践MySQL4」にもあった、サーバ・クライアント間の文字コードの自動変 > 換、さらには CONVERT(expr USING transcoding_name) を使った文字コード > 変換ですが、半角カタカナの場合には動かないようなのです。 > 動くのは、ujis --> utf8 の変換だけみたいです。 バージョン4.1以降の文字コード変換の機能についてですが、 シフトJIS(sjis)と日本語EUC(ujis)の半角カナが変換時に文字化けするという症状は、 1ヶ月ほど前に、私の環境でも再現しました(RedHat9+MySQL5.0.0alpha)。 ソースコードを調べたところバグと思われたので、その部分を修正して再コンパイルしたところ正しく動作しました。 修正部分も含めてMySQL AB社に報告したところ、バグであると認めてもらえ、 少なくともsjisに関しては修正が終わり、4.1.2から反映されるようです。 http://bugs.mysql.com/bug.php?id=3290 まだ4.1.2は出ていないようですので、私が動作確認した修正箇所(5.0.0alphaですが、 4.1.1でもおそらく同じではないでしょうか?確認していませんが…)を以下に示しますので、 もし必要があればお試しください。 --- 半角カナが文字化けする原因は、 ●sjisからの変換、sjisへの変換については、sjisは半角カナを1バイトとして扱うのに MySQLではなぜかともに2バイトとして扱っている ●ujisへの変換については、ujisは半角カナを2バイトとして扱うのに MySQLではなぜか1バイトとして扱っている(ujisからの変換については MySQLが2バイトとして扱っているので問題ない) というところにあります。その部分を直したところ正しく動作しました。 sjis 1.ctype-sjis.c 1-1.my_mb_wc_sjis関数 前: .... if (hi<0x80) { pwc[0]=hi; return 1; } if (s+2>e) return MY_CS_TOOFEW(0); .... 後: .... if (hi<0x80) { pwc[0]=hi; return 1; } if((hi>=0xA1)&&(hi<=0xDF)) { pwc[0]=func_sjis_uni_onechar(hi); return 1; } if (s+2>e) return MY_CS_TOOFEW(0); .... 1-2.my_mb_wb_sjis関数 前: .... if (!(code=func_uni_sjis_onechar(wc))) return MY_CS_ILUNI; if (s+2>e) return MY_CS_TOOSMALL; s[0]=code>>8; s[1]=code&0xFF; return 2; .... 後: .... if (!(code=func_uni_sjis_onechar(wc))) return MY_CS_ILUNI; if((code>=0xA1)&&(code<=0xDF)) { s[0]=code; return 1; } if (s+2>e) return MY_CS_TOOSMALL; s[0]=code>>8; s[1]=code&0xFF; return 2; .... ujis 2.ctype-ujis.c my_wc_mb_euc_jp関数 前: .... ret=my_wc_mb_jisx0201(c,wc,buf,buf+2); if (ret==1) { if (s+1>e) return MY_CS_TOOSMALL; s[0]=0x8E; s[1]=buf[0]; return 1; } .... 後: .... ret=my_wc_mb_jisx0201(c,wc,buf,buf+2); if (ret==1) { if (s+1>e) return MY_CS_TOOSMALL; s[0]=0x8E; s[1]=buf[0]; return 2; } .... 以上です。 -- 松信 嘉範 / Matsunobu Yoshinori E-mail: Yoshinori.Matsunobu@xxxxxxxxxx
-> 9229 2004-04-17 00:43 ["Matsunobu, Yoshinor] Re: 半角カタカナのコード変換 9231 2004-04-19 21:23 ┗[Hirofumi Fujiwara <f]