edo*_*oft 47 sql sql-server casting
在SQL Server 2005中这个查询
select len(cast('the quick brown fox jumped over the lazy dog' as varchar))
Run Code Online (Sandbox Code Playgroud)
返回30作为长度,而提供的字符串有更多的字符.这似乎是默认的.为什么30,而不是32或2的任何其他权力?
[编辑]我知道在转换为varchar时我应该总是指定长度,但这是一个快速的让我们检查的查询.问题仍然存在,为什么30?
cur*_*isk 45
为什么不指定varchar长度?即:
SELECT CAST('the quick brown fox jumped over the lazy dog' AS VARCHAR(45))
Run Code Online (Sandbox Code Playgroud)
至于为什么30,这是SQL Server中该类型的默认长度.
如果未在数据定义或变量声明语句中指定n,则默认长度为1. 如果在使用CAST和CONVERT函数时未指定n,则默认长度为30.
Cha*_*arl 26
关于为什么30而不是32或2的任何其他幂的问题,对于varchar(n),存储大小是n + 2个字节,这使得字节存储大小为32为长度为30的字符串.可能是这是他们看了什么?
然后只是一些注释的清晰点:未指定长度varchar字段的默认长度是n = 1.CAST或CONVERT为此数据类型的转换返回的默认字符串长度为30.
很酷的问题!
Microsoft 选择 30 作为 SQL Server、Access 的 Jet DB 引擎及其其他产品中 CHAR 和 VARCHAR 的默认长度。它起源于过去,名称或地址列的默认长度最初设置为 30。其他 DB(例如 Informix)对于 CHAR 默认为 20,对于 VARCHAR 默认为 255。
归档时间: |
|
查看次数: |
43310 次 |
最近记录: |