在我的开发中,我总是让我的VARCHAR
列具有字符长度,例如summary VARCHAR (250)
因为我认为“250个字符应足以容纳摘要。”然后当内容管理员告诉我他们写错时他们收到错误时,我最后会加长它。摘要。 我很少有这样的情况,我确定列中的文本应该多长或最多。所以看起来我应该使用NVARCHAR
,我假设具有动态字符数组作为其基础数据结构,而不是固定大小的字符数组。还是有其他原因我应该使用VARCHAR (somenumber)
?????
答案 0 :(得分:0)
NVARCHAR并不意味着你的想法。 N
只是意味着使用unicode字符而不是ascii(顺便说一句,这可能是汇总字段的好主意)。 NVARCHAR列仍需要一个长度。
答案 1 :(得分:0)
你错了NVARCHAR。 NVARCHAR用于Unicode字符串。您还可以为NVARCHAR指定最大长度。 NVARCHAR占用的空间比VARCHAR多,但可以使用更广泛的字符和符号。
在SQL Server中,如果您没有指定最大长度,则默认为1.因此,将其声明为NVARCHAR与NVARCHAR(1)相同。 VARCHAR也是如此。此外,对于VARCHAR和NVARCHAR,长度不是固定大小,它仅指定最大大小。
您在MySQL和SQL Server上都标记了这个问题;我不知道它在MySQL中的默认值。
你可以使用VARCHAR(MAX),但要小心。使用MAX更改SQL Server数据库引擎存储数据的方式。它将其存储为TEXT字段,该字段不具有VARCHAR字段的所有功能。改为使用VARCHAR(8000)。
答案 2 :(得分:0)
这适用于SQL Server吗?
主要问题是应用程序是否需要支持各种语言等文化信息。
如果需要此类支持,NVARCHAR()会存储unicode字符并支持所有类型的语言。请记住,每个字符都需要两个字节。
如果该应用程序仅适用于美国公司,则VARCHAR()将为每个字符保存一个字节。
如果我记得SQL Server内部书籍,那么带有字符串" HELLO WORLD"的VARCHAR(25)长度为11个字符,开销为两个字节。
让我们回顾一下。
DECLARE @A CHAR(11) = "HELLO WORLD" -- Takes 11 characters to store
DECLARE @B VARCHAR(11) = "HELLO WORLD" -- Takes 13 characters to store
DECLARE @C NVARCHAR(11) = "HELLO WORLD" -- Takes 24 characters to store
祝你好运。
John Miner Crafty DBA