迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 >

SQL Server 中 char、varchar、nchar 和 nvarchar 数据类型之间的区别?

作者:迹忆客 最近更新:2023/02/01 浏览次数:

SQL 中 charvarchar 的区别是什么,其次是 ncharnvarchar,是热门的 SQL 面试问题之一,令人惊讶的是并不是每个程序员都知道这个基本区别。 如果大家从名称出发(应该这样做),那么就会发现 char 是一种固定长度的数据类型,而 varchar 应该是一种可变长度的数据类型。 尽管所有 charvarcharncharnvarchar 都用于存储文本或字符串数据,但它们之间存在细微差别。 正如我所说的 char 是固定长度的,这意味着像 Zipcode char(10) 这样的变量或列将只需要 10 个字节来存储数据,包括空间。

另一方面,varchar 变量或列将占用变量空间,具体取决于存储的数据 + 2 个用于存储长度的额外字节,正如我在之前关于 varchar 变量在磁盘中占用多少空间的文章中所解释的那样。 例如,对于列 varchar name(20),如果存储 “Jack”(4 + 2) ,将占用 6 个字节,如果存储 “Jones”(5 + 2) ,则占用 7 个字节。

为了获得更好的性能,我们应该将 char 用于固定长度的列,例如邮政编码,其中每一行都在一定长度以下,例如 印度为 6美国为 5 + 4 位邮政编码。

另一方面,对于可变长度的列,最好使用 varchar 数据类型来节省空间,如果实际数据总是远小于容量,则在 char 类型的情况下会浪费空间。

特别是,这个问题是和其他一系列流行的 SQL 面试问题同样重要,例如 WHERE 和 HAVING 子句与编写 SQL 查询以连接三个表之间的区别。 如果我们遇到任何其他有趣的 SQL 查询,那么也可以与我们分享,如果你不知道答案,我们将一起尝试找出答案。


如何在 SQL 示例中使用 NCHAR 与 NVARCHAR

现在让我们看看 SQL 中 ncharnvarchar 数据类型的区别。 nchar(n)nvarchar(n) 类似于对应的 charvarchar,但占用的空间是它们的两倍,以支持多语言。 额外的空间用于存储每个字符的 Unicode 字符,这意味着每个字符 2 个字节,1 个字符 + 1 个 Unicode。

除了这个基本问题之外,我们还经常会看到一些后续问题,例如何时在数据库中使用 charvarchar? 或者更常见的是 char(20)varchar(20) 变量之间的区别是什么,因为它们只能存储 20 个字节来存储数据。

好吧,主要区别在于 varchar 可能需要更少的字节,具体取决于我们存储在其上的数据长度。 例如,如果我们将“USA”存储在类型为 char(20)varchar(20) 的变量中,那么第一个将占用 20 个字节,而第二个将只占用 5 个字节 (3 +2) ,但是 char 列的性能 在 SELECT 查询中比 varchar 列更好。

同样,如果我们使用 nchar(20)nvarchar(20) 来存储“SQL”字符串,那么第一个变量将占用 40 个字节 (2*20) ,第二个变量将占用 8 个字节 (3*2 +2)

sql varchar 和 nvarchar

以下是 char(10)varchar(10)nchar(10)nvarchar(10) 变量存储相同数据需要多少空间的摘要:

declare @cData char(10)
set @cData = 'SQL' -- 10 bytes
set @cData = 'Java' -- 10 bytes

declare @vcData varchar(10)
set @vcData = 'SQL' --  3 + 2 = 5 bytes
set @vcData = 'Java' -- 4 + 2 = 6 bytes

declare @ncData nchar(10)
set @ncData = 'SQL' -- 10*2 = 20 bytes
set @ncData = 'Java' -- 10*2 = 20 bytes

declare @nvcData varchar(10)
set @nvcData = 'SQL' -- 3*2+2 = 8 bytes
set @nvcData = 'Java' -- 4*2+2 = 10 bytes

谢谢大伙,这就是 SQL 中 charvarchar 数据类型以及 ncharnvarchar 之间的区别。 我希望这些基础知识不仅有助于 SQL 面试,还有助于为表中的列和存储过程中的变量选择正确的类型。 如果大家对 charvarchar 变量有任何疑问或问题,请告诉我。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Mysqldump 备份 MySQL 中的数据

发布时间:2023/05/09 浏览次数:192 分类:MySQL

本篇文章将介绍如何使用 mysqldump 只备份数据。 在这里,我们将探讨 --no-create-info 、--compact 、--skip-triggers 和 --no-create-db 选项。

更新 MySQL 表中的主键

发布时间:2023/05/09 浏览次数:61 分类:MySQL

本篇文章介绍如何更新 MySQL 表中的主键。 我们将使用 ALTER 命令对主键进行任何更改。更新 MySQL 表中的主键 我们可以在多种情况下更新 MySQL 表中的主键。

在 MySQL 中获取命令历史记录

发布时间:2023/05/09 浏览次数:150 分类:MySQL

本文重点介绍了在 Windows 和 Linux 中获取我们已执行的 MySQL 命令历史记录的各种方法。MySQL命令历史

Oracle 的 decode 函数在 MySQL 中的等价物

发布时间:2023/05/09 浏览次数:115 分类:MySQL

本篇文章介绍了三种替代实现,我们可以将它们用作 MySQL 中 Oracle 的 decode() 函数的等价物。 为此,我们将使用 IF()、CASE 以及 FIELD() 和 ELT() 的组合。

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 MySQL 中转换为十进制

发布时间:2023/05/09 浏览次数:150 分类:MySQL

有时,我们可能需要将一种数据类型转换为另一种数据类型。 下面是我们如何使用带有 DECIMAL(M,D) 的 CAST() 和 CONVERT() 函数在 MySQL 中转换为十进制。

在 MySQL 中获取当前日期和时间

发布时间:2023/05/09 浏览次数:145 分类:MySQL

本篇文章我们将学习 NOW()、CURRENT_TIMESTAMP()(也写为 CURRENT_TIMESTAMP)和 SYSDATE() 来获取 MySQL 中的当前日期和时间。 我们还将看到这三个功能之间的比较。在 MySQL 中获取当前日期和时间

更改 MySQL 服务器中的 max_allowed_packet Size

发布时间:2023/05/09 浏览次数:142 分类:MySQL

本篇文章介绍如何更改 MySQL 服务器中的 max_allowed_packet 大小。 为了了解这一点,我们将使用两个操作系统,Windows 10 和 Linux (Ubuntu)。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便