3

VARCHAR は、必要かどうかに関係なく常に同じ量のメモリを占有する CHAR とは異なり、必要な唯一のメモリを占有することを学びました。

私の質問:フィールド VARCHAR(50) があるとします。30 文字を格納する必要がある場合、30 バイトしか占有せず、それ以上は占有しないことがわかっています (1 文字が 1 バイトであると仮定)。では、必要なメモリしか使用しないため、50 または 30 または任意の上限について言及する必要があるのはなぜですか。

更新:無駄なメモリが占​​有されないため、上限について言及する必要があるのはなぜですか?

4

5 に答える 5

2

あなたはそうしません。あなたはそれを作るでしょうVARCHAR(30)。許可される文字の最大数についてです。では、なぜ30文字の列で50文字までの列を受け入れるのでしょうか。

于 2012-12-06T07:59:53.840 に答える
2

更新:無駄なメモリが占​​有されないため、上限について言及する必要があるのはなぜですか?

次のようなもので入力をサニタイズしている場合final_value = left(provided_value, 30)、データベースにとっては問題ありません。お好みで設定できvarchar(255)ます。

最大制限を設定するのは、実際に計画しているよりも多くの文字を誤って送信しないようにするためです。

  1. すべてのテーブルのすべての列のデータ サイズの制限を思い出すために、コードのメンテナンスが将来的に面倒になるでしょう。とにかくそれを行う必要がありますが、それに関する情報の単一のソースとしてテーブル定義を見てください。

  2. アプリまたは Web サイトの 1 つのコードから( insert/ )にテーブルが書き込まれますか? updateたとえば、REST API リスナーのようなデータベースへの別のインターフェイスがある場合、同じ値を再度入力しないと、データが不均一になるという問題が発生します。これは、まさにデータベースが防止できるものです。

  3. コーディング エラー (またはハッキング) がデータのアプリ/ウェブサイト コントロールをバイパスする場合 (サイズ制限またはさらに悪い場合)、少なくともデータベースはデータを正しく維持します。

于 2012-12-06T12:31:31.470 に答える
0

物事を動的にするために、VARCHAR(50) を使用しています。これは、将来、文字列のサイズを超える可能性があり、最大サイズが 50 になる可能性があることを知っているためです。ただし、定数には CHAR(30) を使用できます。これは、サイズがof string は常に 30 になります。サイズが超過または減少すると、SQL は例外を報告します。

http://dev.mysql.com/doc/refman/5.0/en/char.htmlをご覧ください

于 2012-12-06T08:03:40.337 に答える
0

メモリ使用量だけが問題になる場合は、varchar に任意の大きな数値を指定できます。ただし、上限を確実に保持したい場合は、それを最大値として varchar に指定します。

于 2012-12-06T08:11:45.730 に答える
0

VARCHAR(50) または VARCHAR(30) を使用できます。それは問題ではありませんが、動的な場合は限界がわかりません。

その場合は上限をとらせていただきます。

于 2012-12-06T08:08:19.700 に答える