- PR -

【DB2】WindowsとAS/400でのカラム長

1
投稿者投稿内容
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2005-03-15 10:01
お世話になります。

うる覚えなのですが…。
DB2で、同じレコードのvarcharのカラム長をWindowsとAS/400で
AS/400のほうのカラム長を増やさないとダメというのが
あったような気がするのですが、どなたかご存知ないでしょうか?

宜しくお願いいたします。
fukus
会議室デビュー日: 2004/10/20
投稿数: 9
投稿日時: 2005-03-15 10:56
varcharに限りませんが、いわゆる2バイト文字が格納される場合、2バイト文字の開始と終了を制御する為に、それぞれ一桁×2が自動で付加されることとなります。
そのために、最低限必要桁数プラス2桁が余分に必要です。
1バイト文字と2バイト文字が混在する場合は、必要桁数に対して2倍用意しておけば事足りるでしょう。

#以前自分でパターンを作ったときは、最大で1.66倍になったと記憶しています。
#どんなパターンだったか覚えてないし、片手間だったので精度の自信はありません。

あと、蛇足ではありますが、AS/400(現在はi5)においてvarcharは容量の節約にはなりません。
内部的には最大長を固定で領域確保しています。
かつ、可変長項目に見せかけるために付加情報を追加で持つ為、むしろcharで宣言するよりも余分に容量を必要としてしまいます。
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2005-03-15 13:44
ありがとうございます。

引用:

fukusさんの書き込み (2005-03-15 10:56) より:
varcharに限りませんが、いわゆる2バイト文字が格納される場合、2バイト文字の開始と終了を制御する為に、それぞれ一桁×2が自動で付加されることとなります。
そのために、最低限必要桁数プラス2桁が余分に必要です。
1バイト文字と2バイト文字が混在する場合は、必要桁数に対して2倍用意しておけば事足りるでしょう。



1バイトのみのカラム:+2桁
2バイトのみのカラム:+4桁
1・2バイト混在のカラム:+4桁

上記認識であっていますでしょうか?

引用:

あと、蛇足ではありますが、AS/400(現在はi5)においてvarcharは容量の節約にはなりません。
内部的には最大長を固定で領域確保しています。
かつ、可変長項目に見せかけるために付加情報を追加で持つ為、むしろcharで宣言するよりも余分に容量を必要としてしまいます。



見せかけですか!?
大変勉強になります。ありがとうございます。
fukus
会議室デビュー日: 2004/10/20
投稿数: 9
投稿日時: 2005-03-15 14:58
引用:
1バイトのみのカラム:+2桁
2バイトのみのカラム:+4桁
1・2バイト混在のカラム:+4桁



ちょっと違います。
開始文字で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との互換性の為に存在しているのではないか。と私は思っています。
すなめり
常連さん
会議室デビュー日: 2003/01/29
投稿数: 37
お住まい・勤務地: 横浜
投稿日時: 2005-03-15 16:11
引用:

d.「あAあAあAあAあAあ」→「_あ__A__あ__A__あ__A__あ__A__あ__A__あ_」

d.元の文字列に対して22桁付加

となります。
ん?d。は元が17桁だから、このパターンを想定したら2倍じゃ足りないですね・・・



d.パターンの場合、
→「_あ_A_あ_A_あ_A_あ_A_あ_A_あ_」
で、12桁追加だと思うのですが、いかがでしょう?
半角のAの前後には、開始/終了コードは不要ですよね。
fukus
会議室デビュー日: 2004/10/20
投稿数: 9
投稿日時: 2005-03-15 18:23
引用:

で、12桁追加だと思うのですが、いかがでしょう?
半角のAの前後には、開始/終了コードは不要ですよね。


お。そうですね。
訂正ありがとうございました。
Orphan
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 54
投稿日時: 2005-03-16 13:22
皆さんありがとうございました。
1

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