ソートで「A」が「0」より前にくる話

SIer さんが、便利なネットワークアプリを紹介してくれた。
今流行のクラウドコンピューティング?
SQL をブラウザから POST すると、ネットワーク越しにどこかのDBMSでクエリーが走って、その結果セットを CSV で返してくれるというもの。
もちろん、SQL も直に手で書くのではなくて、ビジュアルデザイナで生成することもできる。

これで何が便利かというと...最近はPCもかなり強力だから「非力なPCの場合は云々」というのは大きなセールスポイントにならない。
むしろ、個別の PC に ODBC ドライバ他をインストールする必要がないとか、Access をインストールする必要がないとか、そういったのが便利だ。離れた席の人にクエリーを配るときとか。

しかしいきなり問題発生。
簡単な説明を受けて、早速使ってみたところ、どうも結果の並び順が私の想像とは異なっている。
十六進数的に考えて、「0 1 2 3 …」と数えていったら「… 9 A B C …」と並ぶのが普通だと、私は思っていた。
しかし、今回のアプリでは「A B C … X Y Z 0 1 2 3」と並んでくれる。
早速 SIer さんに尋ねたところ、「EBCDIC順で文字はソートされます 」とのこと。

EBCDIC というのは、主にメインフレームなどで使われている文字コードのことだ。
なるほど、クラウドコンピューティングと言わないまでも、ネットの向こう側にはメインフレームがあったわけだ。
我々が通常目にする ASCII だとか JIS だとかのコードとは文字の並び順が異なっており、確かに EBCDIC では、数字よりもアルファベットのほうが前に来ている。

さて、問題はこれで納得すべきかどうかだ。

幸いこのアプリは丁寧なことに、EBCDIC で処理した後、SJIS に文字コードを変換する機能まで持っている。なので、外字問題を除くと文字化けの心配はまずない。
しかし、既存のシステムが、ASCII 順でソートされることが前提で構築されているのに、ここで EBCDIC 順でソートされたら混乱するだけだ。
出てきた CSV をもう一度クライアント側でソートする? だとすると、ソートするためのユーティリティを全クライアントに配布しなければならない。
これって...

まあ、いずれにせよ、何も考えずにソートしていると、こういう落とし穴もあり得るという話だ。
数字と英字だけのソートでも色々な並び順があり得るのだ。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック