Sql server 你的Nvarchar有多大 当设计数据库时,在决定NVARCHAR应该是多大的时候,你会考虑什么样的决定?

Sql server 你的Nvarchar有多大 当设计数据库时,在决定NVARCHAR应该是多大的时候,你会考虑什么样的决定?,sql-server,database,database-design,nvarchar,Sql Server,Database,Database Design,Nvarchar,如果我要制作一个地址表,我的直觉反应是地址行1是nvarchar(255),就像旧的access数据库一样 我发现使用它会让我为旧的“字符串将被截断”而烦恼。我知道这可以通过限制输入框来防止,但是如果用户的地址行超过255,这应该是允许的 我的nvarchar(????我个人不使用nvarchar:-)我总是使用varchar 然而,我倾向于使用100作为名称,1000作为注释。捕获和处理较长的字符串是客户端可以做的事情,比如通过regex,因此SQL只获取它所期望的数据 通过参数化调用(例如通

如果我要制作一个地址表,我的直觉反应是地址行1是nvarchar(255),就像旧的access数据库一样

我发现使用它会让我为旧的“字符串将被截断”而烦恼。我知道这可以通过限制输入框来防止,但是如果用户的地址行超过255,这应该是允许的


我的nvarchar(????

我个人不使用nvarchar:-)我总是使用varchar

然而,我倾向于使用100作为名称,1000作为注释。捕获和处理较长的字符串是客户端可以做的事情,比如通过regex,因此SQL只获取它所期望的数据

通过参数化调用(例如通过存储过程)可以避免截断错误。 如果参数被定义为varchar(200),比如说,那么如果发送>200,截断将以静默方式进行。仅对INSERT或UPDATE语句引发截断错误:使用参数时不会发生截断错误

SQL Server的255“限制”可追溯到6.5,因为vachar限制为255。SQL Server 7.0+更改为8000,并添加了对unicode的支持

编辑:

为什么我不使用nvarchar:双内存占用,双索引大小,双磁盘大小,根本不需要它。我在一家瑞士大公司工作,在全球设有办事处,所以我不是狭隘的

这里还讨论了:


进一步考虑,我建议unicode对客户开发人员有吸引力,但作为开发人员DBA,我关注的是性能和效率…

这取决于字段所代表的内容。如果我正在做一个快速原型,我会保留默认值255。对于任何类似于评论等的内容,我可能会将其设置为1000


我唯一能让它变小的方法就是在我明确知道的东西上,比如siez、邮政编码或NI号码等等。

我的建议是:把它们做成你真正需要的大小

例如,对于邮政编码列,10-20个字符就足够了。电话号码也一样。电子邮件可能更长,50-100个字符。名字——嗯,我通常只需要50个字符,名字也是如此。如果您真的需要,您可以随时轻松地扩展字段-这根本不是什么大任务

让所有的varchar/nvarchar字段尽可能大,这真的没有意义。毕竟,SQLServer页面是固定的,并且限制为每行8060字节。拥有10个NVARCHAR(4000)字段只是自找麻烦。。。。(因为如果你真的试图用太多的数据填充它们,SQL Server会向你吐出来)

如果您确实需要一个非常大的字段,请使用NVARCHAR/VARCHAR(MAX)-这些字段存储在您的页面中,只要它们合适,如果它们太大,将被发送到“溢出”存储

NVARCHAR vs.VARCHAR:这可以归结为您是否真的需要“外来”字符,例如日语、中文或其他非ASCII样式的字符?在欧洲,即使是一些东欧字符也不能用VARCHAR字段来表示(它们将被去掉hachek(?拼写?)。西欧语言(英语、德语、法语等)都能很好地使用VARCHAR字段

但是:NVARCHAR在任何时候都会占用磁盘和SQL Server内存两倍的空间。如果你真的需要它,你就需要它-但是你真的需要它吗?:-)这取决于你自己


Marc

对于需要有特定限制的列(如姓名、电子邮件、地址等),您应该设置合理的最大长度。例如,一个超过50个字符的名字似乎有点可疑,超过这个大小的输入可能包含的不仅仅是一个名字。但是,对于数据库的初始设计,采用合理的大小并将其加倍。因此,对于名字,将其设置为100(如果100是您的“合理尺寸”,则设置为200)。然后将应用程序投入生产,让用户玩足够长的时间来收集数据,然后检查实际的
max(len(FirstName))
。有没有可疑的价值观?有超过50个字符的吗?找出里面是什么,看看它到底是不是名字。如果不是,输入表单可能需要更好的解释/验证


对评论也这样做;最初将它们设置为
nvarchar(max)
。当您的数据库增长到足以开始优化性能时,请返回。将评论的最大长度增加一倍,你的专栏就有了一个很好的最大长度。

为什么你要将评论限制在100?堆栈溢出允许600。您使用什么数据类型?为什么不使用nvarchar?你用什么来代替呢?哦,好吧,但是是什么让你决定这个数字呢?为什么不选择4000?这里的产品管理类型系统不需要它:我们有名称和可选注释。长度也是由需求和实用性决定的:它要求简洁,使我们的GUI看起来更好!如果我的应用程序被俄罗斯人使用,那么是的,我需要它。谢谢应该在需求规范中,不是吗?;-)我猜,但如果你是一个谁使规格,然后它归结于你。。。