3

MS-SQL Server 2005 データベースを検索して、特定のテキスト フィールドの長さが常に 8 の倍数であることを確認していました。次のクエリを実行すると、いくつかの行の長さが 30 であることがわかりました。しかし、それらのレコードを調べたところ、それよりも長いことがわかりました。

select distinct len(cast(textfield as varchar)) from tablename

ただし、varchar の長さを (次のクエリのように) もっと長く指定すると、問題なく動作します。

select distinct len(cast(textfield as varchar(1000))) from tablename

デフォルトが 30 である理由と、これが構成可能な設定であるかどうかを知っている人はいますか?

4

3 に答える 3

1

キャストは、その列に収まる必要があるさまざまな行が多数ある場合に発生する可能性があります。データベース エンジンは、完全ではないため、クエリが返す可能性のあるすべての行の長さをチェックして、最大値を設定する長さを調べるという面倒なことをしたくないため、どの行もチェックしません。デフォルトの 30 を使用するだけです。これは、よくわからないため、恣意的な大まかな推測です。

おそらく、VARCHAR の最大長を 256 などに設定するのが賢明だったかもしれませんが、何よりも、どのくらいの長さが必要なのかを実際には知らないということを思い出させるのに役立ちます。あなたがそれを言わない限り。

于 2009-04-22T14:44:09.717 に答える
0

これは任意の数値であり、私の知る限りでは構成できません。長さを指定したくない場合は考えられません。

于 2009-04-22T14:10:57.067 に答える