- PR -

VB.NETで文字列長の取得方法

投稿者投稿内容
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-09-02 13:19
引用:
本件、入力された文字列がデータベースに格納できるサイズか調べたいんですよね?
SQLが以下のように流れるとして、それぞれの文字コードはどうなるんでしょうか?


    1.入力コントロール(TextBox.Text?)
    2.VBアプリ内部のSQL(Dim sql as String?)
    3.DBクライアント
    4.データベース内部

どうなるんでしょうか、とはどういう意味でしょう。
少なくとも1と2についてはString自体なので文字コードは定義されません
(内部的にどの文字コードで持ってるかなどの話は別にして)
データベース内部の文字コードはDB側の設定にしたがって格納されてるんじゃないですかね。

引用:
サロゲート文字が1全角文字分多くカウントされる件については

これ、多くカウントされますかね。UTF-8で1文字になってGetByteCountで多分4バイトになるから
文字列長 += 2を通るんじゃないですかね。

で、話は戻るかもしれませんが入力チェックするだけなら正規表現とかで十分だと思いますよ。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-09-02 14:59
引用:

どうなるんでしょうか、とはどういう意味でしょう。



文字コードは何になるのでしょうか?です。



この入力チェックは、データベースへ登録可能かチェックしたいのですから、
チェック仕様はDB内部の文字コードと項目定義に従います。

例えば、DB内部の文字コードがShift-JISで、項目定義がvarchar(10)だとしたら、
入力チェックでは「Shift-JISで10バイト以下か?」を調べることになります。

画面入力からDB格納までが一貫してShift-JISであれば
入力チェックも単純にShift-JISで判定すれば良いのですが、
「入力はunicodeでDBはShift-JIS」など文字コード変換が発生するケースでは、
そう単純では無い気がします。

そこで、画面入力からDB格納までのデータの文字コードを確認したいと思いました。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2007-09-02 15:30
>文字コードは何になるのでしょうか?です
ORACLEだと指定できる
ほかは知らない


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-09-02 20:50
ご参考: http://blogs.wankuma.com/jitta/archive/2007/08/20/91162.aspx

> そこで、画面入力からDB格納までのデータの文字コードを確認したいと思いました。
重要ですね。もっとも、Unicode(UTF-16)で統一したら問題ないのに。。。とか思ったりしますが。「Wave-Dash 問題」を回避するためにも、統一できるなら統一した方がよいと思います。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-09-03 01:47
引用:
この入力チェックは、データベースへ登録可能かチェックしたいのですから、
チェック仕様はDB内部の文字コードと項目定義に従います。

例えば、DB内部の文字コードがShift-JISで、項目定義がvarchar(10)だとしたら、
入力チェックでは「Shift-JISで10バイト以下か?」を調べることになります。

varchar(10)のときに、「あいうエオカキ」はShift_Jisなら格納できるけどeuc_jpだと格納できない、
とかそういうことですかね。それは大いに重要だと思います。

引用:
「入力はunicodeでDBはShift-JIS」など文字コード変換が発生するケースでは、
そう単純では無い気がします。

入力というのは例えばWEBでのrequestEncodingなどでしょうか。
一度Stringのインスタンスになってから入力チェックするのでそこはほとんど影響はないと思います。

引用:
データベース内部の文字コードはDB側の設定にしたがって格納されてるんじゃないですかね。

私はちょっと変なことを言ったかもしれない。DBにはあくまでバイト列が格納されているだけですね。
「DB側の設定にしたがって格納」じゃなくて「DBクライアントの設定によって取得・登録」かな。

スキルアップ/キャリアアップ(JOB@IT)