1. ホーム
  2. sql

[解決済み】なぜ歴史的に人々はデータベースのフィールドの大きさに256ではなく255を使うのですか?

2022-04-10 20:19:35

質問

データベースのフィールドの大きさが255文字に設定されているのをよく見かけますが、伝統的/歴史的な理由は何でしょうか?ページングやメモリの制限、パフォーマンスに関することだと思いますが、255と256の区別はいつも私を混乱させてきました。

varchar(255)

これが容量や大きさであることを考慮すると インデクサではない , なぜ256より255がいいのか? バイトは何らかの目的(ターミネータとかヌルとか)で予約されているのでしょうか?

おそらく、varchar(0)は無意味(容量がゼロ)なのでは?その場合、2^8 のスペースは 256 になるはずですが?

パフォーマンス上の利点がある他の倍率はありますか?例えば、varchar(512)はvarchar(511)やvarchar(510)よりもパフォーマンスが劣るのでしょうか?

この値は、新旧すべてのリレーションズ・データベースで同じですか?

免責条項 - 私はDBAではなく開発者です。私は、ビジネスロジックに適したフィールドのサイズとタイプを、それが分かっている場合には使用します。 歴史的 この好みの理由は、たとえそれがもう関係ないとしても(しかし、まだ関係があるならなおさら)。

編集する

回答ありがとうございます。サイズを格納するためにバイトが使用されるということで、いくつかのコンセンサスがあるようですが、私の中ではこの問題が決定的に解決されたわけではありません。

メタデータ(文字列長)が同じ連続したメモリ/ディスクに格納されているのであれば、ある程度納得がいくのですが。1バイトのメタデータと255バイトの文字列データは、互いに非常にうまく適合し、256バイトの連続したストレージに収まるので、おそらくきちんと整頓されているはずです。

しかし...メタデータ(文字列長)が実際の文字列データとは別に(おそらくマスターテーブルに)保存されている場合、メタデータを1バイトの整数で保存する方が簡単だからといって、文字列データの長さを1バイトで制限するのは少しおかしいと思うのです。

どちらの場合も、おそらくDBの実装に依存する微妙なところだと思われます。255を使う習慣はかなり広まっているようなので、当初はどこかで誰かがそれなりの主張をしたはずですが、それがどんなケースだったか、誰か思い出せますか?プログラマは理由なく新しい慣習を採用することはありませんし、この慣習もかつては新しかったに違いありません。

どのように解決するのか?

最大文字数が255文字であるため、DBMSはフィールド内のデータの長さを示すために1バイトを使用することを選択することができます。もし上限が256以上であれば、2バイトが必要となる。

長さ0の値は、確かに varchar のデータで、(他に制約がない限り)。ほとんどのシステムはこのような空文字列をNULLとは区別して扱いますが、一部のシステム(特にOracle)は空文字列をNULLと同じように扱います。空文字列がNULLでないシステムの場合、その値をNULLとみなすかどうかを示すビットを行のどこかに追加する必要があります。

ご指摘のとおり、これは歴史的な最適化であり、今日のほとんどのシステムには関係ないでしょう。