- VARCHAR不存储Unicode字符。
- NVARCHAR可以存储Unicode字符。
- 现代应用程序应始终兼容Unicode。
- NVARCHAR需要两倍的空间来存储。
- 由于存储空间非常廉价,因此第4点并不重要。
因此,在设计SQL Server数据库时,今天应始终使用NVARCHAR。
这是合理的推理吗?是否有人不同意任何前提条件? 今天选择VARCHAR而不是NVARCHAR的原因有哪些?
因此,在设计SQL Server数据库时,今天应始终使用NVARCHAR。
这是合理的推理吗?是否有人不同意任何前提条件? 今天选择VARCHAR而不是NVARCHAR的原因有哪些?
将数据类型与要存储在列中的数据匹配。通过类似的论证,您可以说为什么不在NVARCHAR列中存储所有数据,因为数字和日期可以表示为数字字符串。
如果要存储在列中的数据的最佳匹配是VARCHAR,则使用它。
第四点并不重要,因为存储空间非常便宜。
这不仅涉及存储,还包括带宽、CPU、内存、备份、恢复和传输。所以要节约使用。
我认为仍有不使用nvarchar的有效原因。
然而,新开发应该尽可能使用nvarchar,特别是由于64位系统正在成为标准。此外,即使是小公司现在也更普遍地拥有全球业务。
对于许多不同类型的列,你应该选择VARCHAR而不是NVARCHAR,这个选择应该是基于每一列的情况。
不需要额外开销的NVARCHAR的典型列包括:
ID类型的列:车牌号码、社会安全号码、患者病历标识等。
代码列:国际货币代码(USD、UKP等)、ISO国家代码(US、UK等)、语言代码(en-us等)、会计划分代码等。
邮政编码和邮编列。
我认为,相比较而言,nvarchars的比较成本要高于varchars,因此在真正不需要Unicode能力的地方,例如一些内部ID,使用varchars是完全有效的甚至是首选。
而存储成本仍然非常重要。如果你有数十亿行数据,那么这些“小”差别会很快变得非常大。
我曾经看到nvarchar列被转换为varchar有两个原因:
应用程序正在使用MSSQL Express Edition,该版本的数据库大小限制为4GB。如果有许多数据库部署,切换到MSSQL Standard Edition将太昂贵,这将会在单租户Web应用程序或带嵌入式DBMS的应用程序中出现。更便宜的SQL2008 Web Edition可能会有所帮助。
nvarchar(4000)不够用,但您不想要一个ntext列。因此,您将其转换为varchar(8000)。然而,在大多数情况下,您可能应该将其转换为nvarchar(max)。
存储费用比历史上任何时候都便宜,但如果您在给定的硬盘上可以存储两倍的数据,那是非常有吸引力的,不是吗?
此外,还有用于缓存的 RAM 和比硬盘昂贵得多的固态硬盘。如果您有数百万行数据,使用更紧凑的数据格式将非常有益。