当我用数据类型描述表时,和有nvarchar
什么区别?我看到那总是双重的。例如,值为,精度为 64,长度为 128。Precision
Length
Length
nvarchar(64)
CREATE TABLE T(X nvarchar(64))
EXEC sp_columns 'T'
当我用数据类型描述表时,和有nvarchar
什么区别?我看到那总是双重的。例如,值为,精度为 64,长度为 128。Precision
Length
Length
nvarchar(64)
CREATE TABLE T(X nvarchar(64))
EXEC sp_columns 'T'
精度对文本数据没有意义。
至于 Length 属性,我认为您将它与Size
SQL Server Management Studio 报告的混淆了,后者是列的大小(以字节为单位)。一列的 64Length
是128。nvarchar(64)
Size
unicode 类型(nchar、nvarchar)的大小是字符数的两倍,因为 Unicode 对每个字符使用两个字节。
您可以使用LEN函数获取这些值以获取字符数,并使用DATALENGTH函数获取字节数,例如。
select len(N'some value'), datalength(N'some value')
返回10 20
编辑
从您的评论中,我看到您使用sp_columns来获取表的架构信息。您不应使用任何目录存储过程,而应使用目录视图。
正如文档所述,目录存储过程用于支持 ODBC 应用程序,因此它们的结果是有限的并且可能需要解释,正如您发现的那样。sp_columns
例如,不区分字符和数据长度。
类似于INFORMATION_SCHEMA或sys模式中的模式视图返回详细且明确的信息。例如,INFORMATION_SCHEMA.COLUMNS返回字符 lnegth inCHARACTER_MAXIMUM_LENGTH
和 byte size in CHARACTER_OCTET_LENGTH
。它还包括排序规则和未返回的字符集信息sp_columns
。
视图由 ISO 定义,INFORMATION_SCHEMA
因此它们不包含一些特定于 SQL Server 的信息,例如列是计算列、存储在文件流中还是复制列。您可以使用系统对象目录视图(如sys.columns)获取此信息
NVARCHAR 没有精度。精度用于十进制。而length是字符长度。
nvarchar [ ( n | max ) ]
可变长度的 Unicode 字符串数据。n 定义字符串长度,可以是 1 到 4,000 之间的值。max 表示最大存储大小为 2^31-1 字节(2 GB)。存储大小(以字节为单位)是输入数据实际长度的两倍 + 2 个字节。nvarchar 的 ISO 同义词是国家字符变化和国家字符变化。
从来源: -
精度是数字中的位数。
数字数据类型的长度是用于存储数字的字节数。字符串或 Unicode 数据类型的长度是字符数
NVARCHAR
没有precision
,而length
将是字符长度。试试下面的 SQL
SELECT LEN('Whats the length of this string?')
您可能会将其与Numeric
or混淆Decimal
,请参见此处的图表
3年后但仍然相关..有类似的问题;
我遇到了一个 UDDT 'd_style',使用 alt+f1 我看到这是一个 'nvarchar, length=2, prec=1'。
事实上,我不能在这个字段中插入例如“EU”,因为数据会被截断。所以长度 2 在这里并不意味着 2 个字符。这是因为每个字符保存为 2 个字节,因此 prec = length/2。
在这种情况下,“精度”确实是允许的最大字符数。
但是,当您使用“nvarchar”数据类型创建新表时,如果您希望能够插入示例值“EU”,则只需输入所需的长度(例如 my_field nvarchar(2))。
请注意,这一切都非常“实用”,理论上,精度仅适用于数值,并且是数字中的位数。所以我们不应该谈论 nvarchar 的“精度”。
事实上,这在 SQL Server 中是一个令人困惑的话题,甚至文档也是不合算的。
<data type> ::=
[ type_schema_name . ] type_name
[ ( precision [ , scale ] | max |
[ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]
您在这里看不到“长度 | 精度”,而只有精度。正如其他人指出的那样,在文档中的其他任何地方,在谈论字符数据类型时,他们都将相同的属性称为长度。除非他们不这样做,例如sp_help和同伴的文档。
Length int Column length in bytes.
Prec char(5) Column precision.
Scale char(5) Column scale.
这里的长度是存储长度。(大多数人会称之为尺寸。)
所以很遗憾,您的问题没有正确或最终的答案,您必须始终考虑上下文,并在有疑问时查阅文档。