web-dev-qa-db-ja.com

上位のデータベースプラットフォームで符号なし整数型を使用できないのはなぜですか?

データベースは通常、さまざまなデータ型とカスタム長で非常にカスタマイズ可能です。

PostgreSQLとMS SQL Serverのどちらからも利用できないunsigned int型を使用する構文を探しているので、これは驚きです。 MySQLとOracleのようです。

これは彼らの明白な省略のように見えます-次の最良のパフォーマンスオプションはlong/bigint(8バイト整数)ですが、完全に不要になる可能性があります!ネイティブのunsigned intサポートを含めないことを選択する理由を誰かが知っていますか?

15
Ehryk

マイクロソフトのジムホッグは、この問題に次のように対応しています。

長所と短所があります。プロ側では、いくつかのエラーを回避するための良い方法のようです signed)intをチェックする必要がある場合、値は0より大きくなります。また、intの多くの使用は、実際には決して負になってはならないカウントに関連していることにも挑戦します。 。最大行数を2倍にする問題については? -本当ですが、これはそれほど説得力がありません。

短所としては、CまたはC++での符号付き/符号なしの型の混合は、十分に単純なはずです。そうではありません。それは見つけにくいミスの小さなターピットを開きます-ほとんどは暗黙的なプロモーション/拡張の複雑なルールによるものです。悲しいかな、SQLにはすでにさらに複雑な暗黙のキャストルールのセットがあります。署名されていない整数を追加すると、さらに混乱するでしょう。

私はこの提案を本で続けます。しかし、私たちが追加できる、または追加する必要があるすべての機能の中で、これは、リストの上位にありません。

ソース:---(Microsoft Connect

私は大幅にプロリストに追加し、SQLエンジンはこれよりもはるかに複雑な処理を既に実行しているため、彼らのチームが追加された複雑さを処理できることを繰り返します。合計に同意しませんが、これはSQL Serverが符号なしの型をサポートしない理由です

接続リンクは、質問コメントの Martin Smith によって最初に投稿されました。

14
Ehryk