[解決済み】なぜ歴史的に人々はデータベースのフィールドの大きさに256ではなく255を使うのですか?
質問
データベースのフィールドの大きさが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とみなすかどうかを示すビットを行のどこかに追加する必要があります。
ご指摘のとおり、これは歴史的な最適化であり、今日のほとんどのシステムには関係ないでしょう。
関連
-
[解決済み】SQLが単一グループのグループ関数でないこと
-
[解決済み] データ型 varchar の変換エラー
-
[解決済み] Varchar は Sum 演算子では無効です。
-
[解決済み] mongoの外部キー?
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] PostgreSQL - json 型の等値演算子を識別できませんでした。
-
[解決済み] nvarchar 値 ... をデータ型 int に変換する際に、変換に失敗しました。
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] T-SQLでnot equalには!=と<>のどちらを使うべきですか?
-
[解決済み] URLに最適なデータベースフィールドの種類
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】集約関数のないTSQLピボット
-
[解決済み】一括読み込みデータ変換エラー(指定されたコードページに対して型の不一致または無効な文字)1行目4列目(年)について)
-
[解決済み] 2つの列を分割するには?
-
[解決済み] ORA-12801: 並列クエリサーバー P004 および ORA-01555 でシグナルされたエラー: スナップショットが古すぎる。
-
[解決済み] 検索エラー ORA-00932: 不整合なデータ型: 期待された DATE は NUMBER になりました。
-
[解決済み] Ruby On Rails で NuoDB を使用して SQL コマンドを手動で実行する方法
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] マルチパート識別子をバインドできなかった
-
[解決済み] データベースフィールドの標準的な長さのリスト
-
[解決済み] VARCHAR(255) が(他の長さではなく)頻繁に使用されているのを見るのは、何か理由があるのでしょうか?