プロが教える店舗&オフィスのセキュリティ対策術

Win XP
VB6 SP5
SQL Server

VB6とSQL Serverの桁の扱い方について

文字列の桁数チェックをする際に
以下の不都合が出ています。

例:1
SQL Serverのvarchar(4)には
"aaaa"が登録可能です。

しかしLenB("aaaa")は8が返ってきます。

例:2
SQL Serverのvarchar(4)には
"ああ"が登録可能です。

LenB("ああ")は4が返ってきます。

結論
LenB("aa")とLenB("ああ")は両方共4が返ってきます。
"a"も"あ"も2バイトとして扱っています。
SQL Serverでは"a"は1バイト
"あ"は2バイトとして扱っています。

これは少しおかしいと感じたのですがいかがでしょうか?
文字の桁数チェックを行う時に発見したのですが
みなさんは文字の桁数チェックをどのようなやり方で
行っているのでしょうか?

A 回答 (2件)

少なくともNT4.0やWindows2000はOS内部ではUNICODEで稼動しています。


多分その影響でしょう。VB、VBAからLenB等の関数を使用した場合、1文字2Byteで計算してくれるという間抜けな仕様になっています。

過去に同じ内容の質問があります。
http://www.okweb.ne.jp/kotaeru.php3?qid=177605

参考URL:http://www.okweb.ne.jp/kotaeru.php3?qid=177605
    • good
    • 0

通りすがりの者で詳しい知識が有る訳では有りませんが。


SQLserverは基本として、どのようなマシンからも入出力を受付ける目的で文字コードの限定をしなくてもokな様に、データ保存はユニコードで保存されていると考えて差し支えないのでは無いでしょうか?
マイクロソフトの採用しているユニコードは2バイトコード系だからそのような結果として出るのではないでしょうか?

あまり役に立たない情報ですね。
では。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!