只是nvarchar支持多字节字符吗?如果是这样的话,除了存储问题之外,使用varchars真的有什么意义吗?
当前回答
你说得对。nvarchar存储Unicode数据,而varchar存储单字节字符数据。除了您已经提到的存储差异(nvarchar需要两倍于varchar的存储空间)之外,更喜欢nvarchar而不是varchar的主要原因是国际化(即以其他语言存储字符串)。
其他回答
nArchar将帮助您存储Unicode字符。如果您想存储本地化的数据,这是一种方法。
如果使用单个字节存储字符,则有256种可能的组合,因此可以保存256种不同的字符。排序规则是一种模式,它定义了字符及其进行比较和排序的规则。
1252,即拉丁语1(ANSI),是最常见的。单字节字符集也不足以存储许多语言使用的所有字符。例如,一些亚洲语言有数千个字符,因此每个字符必须使用两个字节。
Unicode标准
当在网络中使用使用多个代码页的系统时,管理通信变得困难。为了实现标准化,ISO和Unicode联盟引入了Unicode。Unicode使用两个字节来存储每个字符。也就是说,可以定义65536个不同的字符,所以几乎所有的字符都可以被Unicode覆盖。如果两台计算机使用Unicode,每个符号都将以相同的方式表示,不需要转换-这就是Unicode背后的想法。
SQL Server有两类字符数据类型:
非Unicode(char、varchar和文本)Unicode(nchar、nvarchar和ntext)
如果我们需要保存来自多个国家的字符数据,请始终使用Unicode。
你说得对。nvarchar存储Unicode数据,而varchar存储单字节字符数据。除了您已经提到的存储差异(nvarchar需要两倍于varchar的存储空间)之外,更喜欢nvarchar而不是varchar的主要原因是国际化(即以其他语言存储字符串)。
我看了一下答案,许多人似乎建议使用nvarchar而不是varchar,因为空间不再是问题,所以启用Unicode以获得很少的额外存储不会有什么害处。嗯,当你想在列上应用索引时,这并不总是正确的。SQL Server对可以索引的字段的大小限制为900字节。因此,如果您有一个varchar(900),您仍然可以对其进行索引,但不能对varchar(901)进行索引。使用nvarchar,字符数减半,因此可以索引到nvarchar(450)。因此,如果您确信不需要nvarchar,我不建议使用它。
一般来说,在数据库中,我建议您坚持所需的大小,因为您可以随时扩展。例如,一位同事曾经认为,对列使用nvarchar(max)没有害处,因为我们在存储方面完全没有问题。后来,当我们试图对此列应用索引时,SQL Server拒绝了这一点。然而,如果他甚至从varchar(5)开始,我们可以简单地将其扩展到我们需要的内容,而不会出现这样的问题,这将要求我们制定一个字段迁移计划来解决这个问题。
遵循Sql Server VARCHAR和NVARCHAR数据类型之间的差异。在这里,你可以看到一个非常描述性的方式。
一般来说,varchar将数据存储为Unicode,因此,如果要在数据列中存储多语言数据(多种语言),则需要N变量。
推荐文章
- 确定记录是否存在的最快方法
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 外键约束可能导致循环或多条级联路径?
- 如何选择每一行的列值不是独特的
- nvarchar(max)非文本
- 在SQL Server 2008 R2中重命名数据库时出错
- 将数据复制到另一个表中
- 如何在SQL中选择表的最后一条记录?
- 修改列,添加默认约束
- 在存储过程中使用“SET XACT_ABORT ON”有什么好处?
- 如何检查SQL Server文本列是否为空?
- 如何创建一个SQL Server函数“连接”多行从一个子查询到一个单独的分隔字段?