56

SQL Server 2005 では、このクエリ

select len(cast('the quick brown fox jumped over the lazy dog' as varchar))

指定された文字列にはそれ以上の文字が含まれていますが、長さとして 30 を返します。これがデフォルトのようです。32 やその他の 2 の累乗ではなく、なぜ 30 なのですか?

[編集] varchar にキャストするときは常に長さを指定する必要があることは承知していますが、これはちょっと調べてみようというクエリでした。疑問が残ります。なぜ 30 なのですか?

4

6 に答える 6

50

varcharの長さを指定してみませんか?すなわち:

SELECT CAST('the quick brown fox jumped over the lazy dog' AS VARCHAR(45))

理由30に関しては、これがそのタイプのSQLServerのデフォルトの長さです。

charおよびvarcharから(Transact-SQL) :

データ定義または変数宣言ステートメントでnが指定されていない場合、デフォルトの長さは1です。CASTおよびCONVERT関数を使用するときにnが指定されていない場合、デフォルトの長さは30です。

于 2008-12-11T13:13:14.110 に答える
33

32 やその他の 2 の累乗ではなく 30 である理由についての質問では、ストレージ サイズは varchar(n) の n + 2 バイトであり、長さ 30 の文字列のバイト ストレージ サイズは 32 になります。彼らは何を見たのですか?

次に、いくつかのコメントを明確にするためのポイント: 未指定の長さの varchar フィールドのデフォルトの長さは n=1 です。このデータ型の変換で CAST または CONVERT が返すデフォルトの文字列の長さは 30 です。

とてもクールな質問です!

于 2012-07-17T05:47:42.007 に答える
5

Microsoft は、SQL Server、Access の Jet DB エンジン、およびその他のいくつかの製品で、CHAR および VARCHAR のデフォルトの長さとして 30 を選択しました。これは、名前列または住所列のデフォルトの長さが最初に 30 に設定されていた昔に由来します。Informix などの他の DB では、CHAR の場合は 20、VARCHAR の場合は 255 にデフォルト設定されています。

于 2012-07-22T05:57:58.167 に答える
3

なぜ30を選んだのかはわかりませんが、MicrosoftのSQLServerを開発したSybaseSQLServerでも同じでした。これは、SQL標準に含まれておらず、他のサーバーの動作が異なるため、これらのRDBMSの特性のようです。

于 2008-12-11T13:13:25.560 に答える
0

convert/cast のデフォルト サイズはメモリ割り当てとは関係がないため、デフォルト値 (つまり 30) は 2 のべき乗とは関係ありません。

30 の理由については、これは Microsoft のガイドラインであり、最初の 30 文字で基本データをカバーするようにこのデフォルト値を指定しています。 http://msdn.microsoft.com/en-us/library/ms176089.aspx

変換/キャストプロセス中にいつでも長さを変更できますが

select len(cast('the quick brown fox jumped over the lazy dog' as varchar(max)))
于 2012-07-17T19:18:40.073 に答える