与NVARCHAR相比,创建列VARCHAR(somenumber)有什么好处?

时间:2015-11-16 22:18:19

标签: mysql sql database-design

在我的开发中,我总是让我的VARCHAR列具有字符长度,例如summary VARCHAR (250)因为我认为“250个字符应足以容纳摘要。”然后当内容管理员告诉我他们写错时他们收到错误时,我最后会加长它。摘要。 我很少有这样的情况,我确定列中的文本应该多长或最多。所以看起来我应该使用NVARCHAR,我假设具有动态字符数组作为其基础数据结构,而不是固定大小的字符数组。还是有其他原因我应该使用VARCHAR (somenumber) ?????

3 个答案:

答案 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