1

SOにはこれについて複数の質問があることは理解していますが、「はい、これが方法です...」という決定的な答えをまだ見つけていません。

繰り返しになりますが、SQL Server の 4 バイト フィールドに符号なし整数値 (32 ビット値または 32 ビット ビットマップ) を格納するには、どのような方法がありますか?

私が見たアイデアは次のとおりです。

1) すべての値に -1*2^31 オフセットを使用する

  • 短所: 読み取り/書き込み/集計の前に、値に対して計算を実行する必要があります。

2) 4 つの tinyint フィールドを使用する

  • 短所: 操作を実行するために値を連結する必要がある

3) バイナリを使用する(4)

  • 欠点: 実際には 4 + 2 バイトのスペースを使用します(編集: varbinary(4) は 4+2 を使用し、binary(4) は 4 のみを使用します)
  • SqlBinary で作業するか、他の型との間でキャストする必要がある
4

1 に答える 1

2

IMO、2 ^ 32 の正の値を 4 バイトに格納する正しい答えがintありますbinary(4)。(varbinary追加の 2 バイトのストレージが発生するだけです)。一連のtinyintまたはsmallint列は、不当に扱いにくい IMO です。

もちろん、2^32 の正の値を格納するための別の解決策がありますが、8 バイトかかります: チェック制約付きの bigint です。今日のストレージとメモリがいかに安価であるかを考えると、IMO、これは他のソリューションでジャンプする必要があるプログラムによるフープを考えると、最も簡単で安価なソリューションですが、各行に余分な 4 バイトを保存したい理由があることは明らかです.

于 2010-04-25T23:38:43.543 に答える