なぜ、長さが30文字でテキストを切り捨てる指定せずにvarchar型としてテキストをキャストしますか?

StackOverflow https://stackoverflow.com/questions/777394

質問

私は、特定のテキストフィールドは、常に長さが8の倍数であったことを確認するために、MS-SQL Server 2005データベースを探していました。私は次のクエリを実行したとき、私はいくつかの行の長さが30であったということだ。しかし、私はそれらの記録を調査したときに、私は彼らがそれよりも長いことがわかった。

select distinct len(cast(textfield as varchar)) from tablename
私は(次のクエリのように)長いものとしてvarchar型の長さを指定した場合、

しかし、それが正常に動作します。

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

誰もが知っている、なぜそれが30デフォルト、これは構成可能な設定である場合はどうなりますか?

他のヒント

その列にフィットする必要があり、多くの異なる行がある場合、

鋳造が起こる可能性があります。それは完璧ではないため、データベースエンジンは、クエリが最大値を設定するためにどのくらい見つけるために戻る可能性があるすべての行の長さをチェックするトラブルに行きたくないので、任意の行をチェックしません - それはちょうどそれが良く分かっていないとして、任意のラフな推測である30のデフォルトをとります。

彼らは256のようなものにデフォルトを設定するために

おそらく、それはスマートだったかもしれない、または任意のVARCHARの最大長があるが、私は何よりも推測、それはそれは本当にどのくらい知っていないことを役に立つリマインダーですあなたがそれを教えてくれない限り、あなたはそれを望んでます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top