- - PR -
【DB2】WindowsとAS/400でのカラム長
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-03-15 10:01
お世話になります。
うる覚えなのですが…。 DB2で、同じレコードのvarcharのカラム長をWindowsとAS/400で AS/400のほうのカラム長を増やさないとダメというのが あったような気がするのですが、どなたかご存知ないでしょうか? 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2005-03-15 10:56
varcharに限りませんが、いわゆる2バイト文字が格納される場合、2バイト文字の開始と終了を制御する為に、それぞれ一桁×2が自動で付加されることとなります。
そのために、最低限必要桁数プラス2桁が余分に必要です。 1バイト文字と2バイト文字が混在する場合は、必要桁数に対して2倍用意しておけば事足りるでしょう。 #以前自分でパターンを作ったときは、最大で1.66倍になったと記憶しています。 #どんなパターンだったか覚えてないし、片手間だったので精度の自信はありません。 あと、蛇足ではありますが、AS/400(現在はi5)においてvarcharは容量の節約にはなりません。 内部的には最大長を固定で領域確保しています。 かつ、可変長項目に見せかけるために付加情報を追加で持つ為、むしろcharで宣言するよりも余分に容量を必要としてしまいます。 | ||||||||
|
投稿日時: 2005-03-15 13:44
ありがとうございます。
1バイトのみのカラム:+2桁 2バイトのみのカラム:+4桁 1・2バイト混在のカラム:+4桁 上記認識であっていますでしょうか?
見せかけですか!? 大変勉強になります。ありがとうございます。 | ||||||||
|
投稿日時: 2005-03-15 14:58
ちょっと違います。 開始文字で1桁、終了文字で1桁となります。 1)1バイト文字のみ 2)2バイト文字のみ 3)1バイトと2バイトが混在 とした場合、 #付加文字をアンダースコアで表現してます 1)1バイト文字のみであれば、10文字必要なら10桁でOK 2)例えば「てすと」という文字を入れる場合「_てすと_」となる為、10文字入れる場合 10*2+2で22桁必要 3) a.「てすとてすと」→「_てすとてすと_」 b.「てすとTESTてすと」→「_てすと_TEST_てすと_」 c.「てすと てすと」→「_てすと_ _てすと_」 d.「あAあAあAあAあAあ」→「_あ__A__あ__A__あ__A__あ__A__あ__A__あ_」 a.元の文字列に対して2桁付加 b.元の文字列に対して4桁付加 c.元の文字列に対して4桁付加 d.元の文字列に対して22桁付加 となります。 ん?d。は元が17桁だから、このパターンを想定したら2倍じゃ足りないですね・・・ javaから連携した時は、AS/400のRPGで作成されたプログラムを呼び出して、そこで文字列の桁数を取得して、最大桁数を超えないようにチェックをしていました。
見せかけです。 他のDBとの互換性の為に存在しているのではないか。と私は思っています。 | ||||||||
|
投稿日時: 2005-03-15 16:11
d.パターンの場合、 →「_あ_A_あ_A_あ_A_あ_A_あ_A_あ_」 で、12桁追加だと思うのですが、いかがでしょう? 半角のAの前後には、開始/終了コードは不要ですよね。 | ||||||||
|
投稿日時: 2005-03-15 18:23
お。そうですね。 訂正ありがとうございました。 | ||||||||
|
投稿日時: 2005-03-16 13:22
皆さんありがとうございました。
| ||||||||
1
