mysql:12440
From: MORIYAMA Masayuki <MORIYAMA Masayuki <msyk@xxxxxxxxxx>>
Date: Sat, 12 Nov 2005 11:48:27 +0900
Subject: [mysql 12440] Re: MySQL 日本語問題吐き出し緊急オフ会 -まとめ 【c案整理】
森山です。 「MySQL自体の互換性を保つべき。」という点、賛成です。 現状の変換を正確に把握するために、MySQL 5.0.15 の ctype-sjis.c、 ctype-ujis.c を調べてみました。 sjis、ujis ともに、ベンダ定義文字は含まれていないために重複符号化の問題 はなく、本来であれば、ラウンドトリップが保証されるはずですが、MySQL の実 装では、元に戻らない文字があります。 sjis->ucs2->sjis 5C(\)->005C REVERSE SOLIDUS->815F(\) ujis->ucs2->ujis A1C0(\)->005C REVERSE SOLIDUS->5C(\) これを MySQL の仕様と考えて、今後とも、互換性を確保するのか、それとも不 具合と考えて修正するのかを決定する必要があります。 本来とは異なる文字に変換されてしまうということで、RBDMS としても問題があ るのではないでしょうか? 修正する場合の考え方は複数あり、 (1) 0x00~0x7F を US-ASCII とする。 (1)-a JIS X 0208 YEN SIGN を U+00A5 とマッピングする (2) 0x00~0x7F を JIS X 0201 ラテン文字とする On Fri, 11 Nov 2005 19:54:38 +0900 Yasufumi Kinoshita <kinoshita.yasufumi@xxxxxxxxxx> wrote: > <私の考え> > ・MySQL自体の互換性を保つべき。 過去との互換性は重要ですね。 > ・他のRDBMSとの変換互換性を重視したい。 > > 残念ながら文字変換の「標準」はソフトウェアの種類だけあると考えています。 > Javaの世界にはJavaの世界の「事実上標準」が、 > RDBMSにはRDBMSの世界での「事実上標準」があるのではと思います。 > > 他のRDBMS(商用、フリー問わず)でも自身の互換性を保つ事情で一度決めた変換則は > 変えることができず、詳細については独自の部分もある状況です。 > というわけでRDBMS毎にバラバラな部分もあるかもしれませんが、 > 共通する部分はできるだけ取り入れてRDBMS間でのデータのやり取りのときの面倒、 > またはRDBMS同士での移行容易性を高めたい。 MySQL 5.0.15 の strings/{ctype-sjis.c,ctype-ujis.c} を見てみると、MySQL 単体で考えた場合にでも、整合性のとれない実装が行われているようです。 変換表の問題以前に、変換表の使いかたが混乱しているようです。 > > というわけで、とりあえずOracle、PostgreSQLで行われている変換則と差分を取ったもの > を元に「c)案」を作成しています。 > > > ・その他の事情の考慮。 > > 現状、MySQLのソース変更内容をレビューするは日本人ではないのではないでしょうか? > それを踏まえて、追加変更のルール・指示はできるだけ分かり易い方がよいと考えます。 > > > <森山さんのメールへのレス> > > > しかし、sjis、ujis に関しては、なるべく標準規格にしたがいつつも UCS 経由 > > の sjis<->ujis 変換を実現し、他のソフトとも互換性がとれるように、Java > > の SJIS、EUC_JP と互換にするのが、今のところ最も妥当なのではないかと考え > > ています。 > > > > sjis、ujis は次の変換表を使うという事を意味します。 > > > > JIS-Unicode間の変換表の選択について > > http://hp.vector.co.jp/authors/VA010341/unicode/ > > 概ね賛成です。しかし、「現状変換が割り当てられていなかった文字限定」です。 > 現状行われているの変換則と違う文字がある場合に、 > それを修正するためには互換性に関して慎重に検討する必要があるのではないでしょうか? > なので現状のsjis、ujisの変換は上記変換表と違う変換を行う部分が少なくともあるので、 > 「sjis、ujis は次の変換表を使うという事を意味します。」 > とは言えないと思います。 > > (一例) > 0x815C(sjis) ←→ U+2015(ucs2) > 0xA1BD(ujis) ←→ U+2015(ucs2) > これらは現状のJIS規格での文字名称とは異なった変換をしていますが、 > Oracle、PostgreSQLなど他のRDBMSでもこの変換が基本になっており、 > 特にPostgreSQL、MySQLでは U+2014(Em Dash) はJIS系のコードへの変換はされず消えてしまいます。 > (※ので「c)案」には入れなければいけませんね^^;) > > > > >4.ucs2 → ujis > > > 007E → 7E > > > 301C → A1C1 > > > FF5E → 3F("?") ※c)案 では A1C1 になる > > > > MySQL だけで完結する問題であれば、自由に決めても構わないと思いますが、 > > ujis を Java の EUC_JP と互換にする場合、上記の c)案の変換はマズイです。 > > これは私のミスです。申し訳ありません。 > 観点は違いますが、Oracleとの互換性も考え、0xFF5E(ucs2) → 8FA2B7(ujis) > とするべきですね。 > > > > > MySQL の sjis、ujis は、Unicode コンソーシアムが配布していた変換表を使っ > > ていると思われますが、あの変換表は、JIS X 0201 ラテン文字との組合せの場 > > 合の変換表で、なおかつJIS規格とは完全に一致しないので、あれをそのまま使 > > うと、実用になりませんし、JIS規格とも異なるものになってしまいます。 > > 正直、具体的に差を指摘していただき、実用の基準を示されなければ、 > 「実用にならない」の実感がわかりません^^; > 私はUnicode コンソーシアムの変換表とまだ比較したことが無いので分かりませんが、 > 少なくとも(sjis、ujis)のUCS2への変換は、調べた範囲では > > ・シフトJISでの NEC特殊/NEC選定IBM拡張/IBM拡張/外字領域 などのJIS規格外文字句点コードは無視 > ・「/」全角バックスラッシュが U+005C と対応付けられる > ・(EUCですみませんが) A1C0、A1C1、A1C2、A1DD、A1F1、A1F2、A2CC、8FA2B7、8FA2C3 にあたる文字 > のマッピングの違い > ※特に A1F1、A1F2、A2CC (¢、£、¬) を U+00A2、U+00A3、U+00AC (半角)に変換するのは > sjis、ujisのみの特徴。 > > 上記以外、他のRDBMS(Oracle、PostgreSQL)との差は無いようです。 > 確かに「/」が「\」とかに化けてしまう可能性はあるものの、 > ここまでで議論になった特定の文字(tilde系)以外は大きく化けることは無く > 上記文字を使用しない人にとっては気づかない程度の差かも知れません。 > > > > > あらためて、まとめますと、実用的な変換は、cp932、eucjpms で実現し、 > > sjis、ujis は標準規格に出来うる限り従うようにするという事になります。 > > sjis、ujisの現状は森山さんが言われるところの「標準規格」とは違う変換をすること > が分かりましたが、これらを無理に変更するのではなく、 > 新たに納得する文字コードセットを追加したほうがいいのではないでしょうか? > MySQLのソースを見ると、UCSへの変換テーブル、UCSからの変換テーブルは > strings/ctype-[コードセット名].c > の中にあります。 > どうしても別の変換則が必要であれば、あたらしいctype-xxxx.cを作成して、 > 「このコードセットを追加してください」 > という要望を出したほうが、既存への影響も少なく、話が早いと思います。 > いかがでしょう? > (ユーザー会の要望としてならば採用されやすいような気も・・) > > 私の考えはあくまで「現状維持しつつ文字消えを改善すること」です。 > > > かなり長文になってしまいましたが、 > <c)案 Unicode -> JIS系文字コードへの変換> > をもういちど整理します。 > ------------------------------------------------------------------------------- > > 1.基本ルール > http://dev.mysql.com/doc/refman/4.1/ja/charset-cp932.html > の下の表のUnicodeからの変換先が割り当てられていない("3F") > 文字について、他のキャラクターセットで割り当てられているもの > については同一の文字を割り当てる。 > ujis、eucjpmsでも同じ文字について同様にする。 > > 2.上記の例外 > FF5E(ucs2) → 8FA2B7(ujis) > > 3.追加 > ucs2 | sjis | cp932 > -----------------------+-------+------- > 00A5 (半角の¥※) | 3F | 3F ←両方とも 5C にする > 2014 "Em Dash" | 3F | 3F ←両方とも 815C にする > > ucs2 | ujis | eucjpms > -----------------------+---------------------+--------- > 00A5 (半角の¥※) | 8E5C5C(化けました)| 3F ←両方とも 5C にする > 00A6 (半角の¦) | 8FA2C3 | 3F 基本ルールで > FFE4 (全角の¦) | 3F | 8FA2C3 基本ルールで > 2014 "Em Dash" | 3F | 3F ←両方とも A1BD にする > > -------------------------------------------------------------------------------- > これで大丈夫でしょうか? > 表記法がばらばらでごめんなさい。 > > > 最後に村上さんが提案されているように、セッション毎に > 同じエンコーディング間、またはJIS系の文字コード同士での > 自動変換をバイパスする(句点コード不動)方法があったほうが便利だと私も思います。 > > > 以上、かなりの長文失礼いたしました。 > > > -- > 木下 靖文 > > e-mail: kinoshita.yasufumi@xxxxxxxxxx > > -- 森山将之 (MORIYAMA Masayuki) e-mail: msyk@xxxxxxxxxx blog: http://msyk.at.webry.info/
12372 2005-11-07 18:16 ["Shuichi Tamagawa" <] MySQL 日本語問題吐き出し緊急オフ会 - まとめ 12373 2005-11-07 20:17 ┣[Yasufumi Kinoshita <] 12374 2005-11-07 21:21 ┃┗["Shuichi Tamagawa" <] 12391 2005-11-08 15:59 ┃ ┗[Yasufumi Kinoshita <] 12400 2005-11-08 20:50 ┃ ┗["Shuichi Tamagawa" <] 12402 2005-11-08 21:14 ┃ ┗[Hirofumi Fujiwara <f] 12412 2005-11-09 10:21 ┃ ┣[Hiro Yoshioka <hyosh] 12413 2005-11-09 10:28 ┃ ┃┗[<takeshi@xxxxxxxxxx>] 12414 2005-11-09 10:38 ┃ ┃ ┗[Hiro Yoshioka <hyosh] 12415 2005-11-09 11:56 ┃ ┃ ┗[<takeshi@xxxxxxxxxx>] 12416 2005-11-09 18:43 ┃ ┃ ┗[Hiro Yoshioka <hyosh] 12428 2005-11-10 14:12 ┃ ┃ ┗[<takeshi@xxxxxxxxxx>] 12520 2005-11-30 10:49 ┃ ┣[Tetsuro IKEDA <tetsu] 12525 2005-12-01 13:26 ┃ ┃┗[Hirofumi Fujiwara <f] 12598 2005-12-21 08:20 ┃ ┗[Tetsuro IKEDA <tetsu] メタデータに2バイト目が`(60)の漢字を使用する場合の不具合の件 12599 2005-12-21 12:43 ┃ ┗[Hirofumi Fujiwara <f] 12377 2005-11-07 23:55 ┣[Tadashi Jokagi <ml@x] 12399 2005-11-08 20:43 ┃┗["Shuichi Tamagawa" <] 12378 2005-11-08 00:11 ┣[<takeshi@xxxxxxxxxx>] 12380 2005-11-08 09:27 ┃┣["Shuichi Tamagawa" <] 12381 2005-11-08 09:36 ┃┃┗[<takeshi@xxxxxxxxxx>] 12403 2005-11-08 21:22 ┃┃ ┗[とみたまさひろ <tomm] 12405 2005-11-08 21:42 ┃┃ ┗[<takeshi@xxxxxxxxxx>] 12397 2005-11-08 20:29 ┃┗["Shuichi Tamagawa" <] 12401 2005-11-08 21:11 ┃ ┗[とみたまさひろ <tomm] 12404 2005-11-08 21:27 ┃ ┣[Hirofumi Fujiwara <f] 12406 2005-11-08 21:52 ┃ ┣[<takeshi@xxxxxxxxxx>] 12417 2005-11-09 19:46 ┃ ┃┣[とみたまさひろ <tomm] 12418 2005-11-09 20:15 ┃ ┃┃┗[<takeshi@xxxxxxxxxx>] 12419 2005-11-10 11:13 ┃ ┃┃ ┗[Yasufumi Kinoshita <] 12425 2005-11-10 13:21 ┃ ┃┃ ┣[<takeshi@xxxxxxxxxx>] 12429 2005-11-10 14:47 ┃ ┃┃ ┗[MORIYAMA Masayuki <m] 12432 2005-11-10 20:15 ┃ ┃┃ ┗[Yasufumi Kinoshita <] 12433 2005-11-11 00:37 ┃ ┃┃ ┗[MORIYAMA Masayuki <m] 12435 2005-11-11 19:54 ┃ ┃┃ ┗[Yasufumi Kinoshita <] Re: MySQL 日本語問題吐き出し緊急オフ会 -まとめ 【c案整理】 -> 12440 2005-11-12 11:48 ┃ ┃┃ ┣[MORIYAMA Masayuki <m] 12441 2005-11-12 12:52 ┃ ┃┃ ┃┗[MORIYAMA Masayuki <m] 12442 2005-11-13 14:06 ┃ ┃┃ ┣[MORIYAMA Masayuki <m] 12452 2005-11-14 11:20 ┃ ┃┃ ┃┗[MORIYAMA Masayuki <m] 12453 2005-11-14 12:51 ┃ ┃┃ ┃ ┣["Shuichi Tamagawa" <] 12462 2005-11-16 11:18 ┃ ┃┃ ┃ ┃┗[MORIYAMA Masayuki <m] 12464 2005-11-16 15:05 ┃ ┃┃ ┃ ┃ ┗["Shuichi Tamagawa" <] 12454 2005-11-14 15:27 ┃ ┃┃ ┃ ┗[Yasufumi Kinoshita <] Re: MySQL 日本語問題吐き出し緊急オフ会 -まとめ 【c案整理】皆様のご意見をお願いします。 12461 2005-11-16 03:10 ┃ ┃┃ ┃ ┣[MORIYAMA Masayuki <m] 12463 2005-11-16 15:00 ┃ ┃┃ ┃ ┗["Shuichi Tamagawa" <] 12466 2005-11-17 11:34 ┃ ┃┃ ┃ ┗[Yasufumi Kinoshita <] 12468 2005-11-17 15:46 ┃ ┃┃ ┃ ┗["Shuichi Tamagawa" <] 12470 2005-11-17 16:36 ┃ ┃┃ ┃ ┗[Yasufumi Kinoshita <] 12473 2005-11-17 17:48 ┃ ┃┃ ┃ ┗["Shuichi Tamagawa" <] 12448 2005-11-14 09:14 ┃ ┃┃ ┗["Shuichi Tamagawa" <] 12426 2005-11-10 13:57 ┃ ┃┗["Shuichi Tamagawa" <] 12427 2005-11-10 14:02 ┃ ┃ ┗[<takeshi@xxxxxxxxxx>] 12411 2005-11-09 09:15 ┃ ┗["Shuichi Tamagawa" <] 12475 2005-11-18 09:48 ┗["Shuichi Tamagawa" <] 12476 2005-11-18 09:54 ┣["Ryuichiro Munechika] 12613 2005-12-28 16:59 ┗["Shuichi Tamagawa" <]