SQL Server | Unicode 和非 Unicode 字符串数据类型
微软 SQL Server 提供了多种数据类型,支持你想要存储的所有数据类型。你可能已经猜到,数据类型是一个属性,用于指定列可以存储数据的类型。它可以是整数、字符串、货币、日期和时间等。在数据库设计人员和开发人员之间引起混淆的一种数据类型是用于存储字符串的数据类型。字符串是作为一组操作的一系列字符。在关系数据库的上下文中,字符串数据类型是那些让你存储固定长度(char)或可变长度数据(varchar)的数据类型。此外,SQL Server 将其字符串类型分为两大类:Unicode 和非 Unicode。Unicode 类型有 nchar、nvarchar 和 ntext,而非 Unicode 类型有 char、varchar/varchar (max) 和 text。在今天的文章中,我们将比较这两个类别,以决定何时使用它们。
追查 Unicode 和非 Unicode 数据类型的起源
Nchar 是“NATIONAL CHARACTER”的缩写,nvarchar 代表“NATIONAL CHARACTER VARYING”,ntext 是“NATIONAL TEXT”的 ISO 同义词。最初用于 Unicode 之前的多字节编码,例如亚洲字符的 JIS 编码。其想法是 VARCHAR 将继续用于 ASCII,而 NVARCHAR 就用于非 ASCII 字符。
这个用例是在互联网还处于起步阶段和 Unicode 项目起飞之前设计的。在那些日子里,特别是亚洲语言,他们使用自己特定且相互不兼容的编码,如中国大陆的 GB、日语的 JIS/SJIS、香港和台湾的 BIG5、台湾的 CNS 等等。然而,随着 Unicode 项目编码的出现,所有这些都改变了,因为数据库供应商意识到只允许 VARCHAR 本身支持多字节字符编码并使用字符集和排序规则来处理特定编码更容易。例如,你可以使用 UTF-8 对应用程序需要支持的任何语言中所需的任何字符进行编码。因此,对特定于“NATIONAL CHARACTER”的整组字符数据类型的需求很快就消失了。
现今,在许多现代数据库引擎中,“NVARCHAR”和“NATIONAL CHARACTER VARYING”实际上只是 VARCHAR 的别名,实际使用几乎(如果不完全)相同。话虽如此,SQL Server 确实以不同的方式对待这两者。如文档中所述:
varchar 和 nvarchar 的主要区别在于它们的存储方式,varchar 存储为常规 8 位数据(每个字符 1 个字节),而 nvarchar 存储每个字符 2 个字节的数据。由于这个原因,nvarchar 最多可以容纳 4000 个字符,它占用的空间是 SQL varchar 的两倍。
如何使用
如上所述,在决定使用哪种类型时,最关心的是所使用的存储量。例如,nvarchar 每个字符使用 2 个字节,而 varchar 使用 1 个字节。因为这样,nvarchar(4000) 使用的存储空间量与 varchar(8000) 相同。因此,如果你有存储 UNICODE 或多语言数据的需求,nvarchar 是最佳选择。而 varchar 存储 ASCII 数据,应该是你正常使用时选择的数据类型。另一个考虑因素是在查询中将 VARCHAR 列联接到 NVARCHAR(反之亦然)可能会导致大幅度的性能下降。
总结
在本文中,我们比较了 SQL Server 的 Unicode 和非 Unicode 字符串数据类型,以决定何时使用它们。 如果你对 Navicat for SQL Server 感兴趣,可以免费试用 14 天!
往期回顾
相关文章
- SQL Server快捷方式丢了怎么启动
- SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)
- SQL Server基础Sql语句复习
- 【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
- java.sql.SQLException: The SQL statement must not be null or empty.这个错误
- SQL SERVER全面优化-------Expert for SQL Server 诊断系列
- Windows Server 2008 R2遗忘管理员密码后的解决方案
- [SQL] sql server中如何查看执行效率不高的语句
- 【转载】gen_server 边缘
- Open Source Streaming Server--EasyDarwin
- SQLServer · 特性分析 · SQL Server 2012的分析函数未必都理解透了(2)
- SQL Server 2005 安装图解(图文详解+全程截图)
- SQL SERVER服务器链接连接(即sql server的跨库连接)
- SQL Server 中读取当前年月
- Sql Server数据库数据导入到SQLite数据库中
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
- SQL Server 为什么事务日志自动增长会降低你的性能
- 统计分析SQL Server Profiler 跟踪的SQL
- SpringBoot配置属性之Server
- Qt 使用数据库SQLite、SQL Server
- C# 连接SQL Server数据库的几种方式--server+data source等方式
- SQL Server未找到或无法訪问server问题解决
- SQL Server数据库附加失败:错误5120和错误950
- [转]MS SQL Server 数据库连接字符串详解
- VB.net:VB.net编程语言学习之基于VS软件连接SQL Server(利用ADO.NET操作数据库/添加新数据源/DataGridView数据表格控件)的简介、案例应用之详细攻略