SQL Server 中的 VARCHAR(n) 列允许多少个字符? VARCHAR 变量在磁盘中占用多少空间?
在任何编程面试中,SQL 的常见问题之一是 SQL 中的 VARCHAR
和 CHAR
数据类型有什么区别? 特别是当我们的项目使用 Microsoft SQL Server 时。 你可能已经见过几次,但鉴于它的流行,现在人们以不同的方式问这个问题,例如 他们会问你一列 VARCHAR(2)
数据类型需要多少空间? 它可以容纳多少个字符? 你如何最小化空间? 使用 CHAR
变量而不是 VARCHAR(2)
更好吗?为什么? 这些是一些非常有趣的问题,比经典的 SQL 问题更有意义,例如 char 与 varchar 数据类型问题之间的区别 。
首先,在较早的问题中,它将测试考生的实践知识而不是理论知识。 其次,它有很多有用的后续问题来进一步检查候选人对 SQL 和数据库基础知识的理解深度。 让我们尝试在本文中回答这些问题。
SQL Server 中的 VARCHAR(n) 列占用多少空间?
关于此主题的第一个问题是 varchar(2)
或 varchar(3)
列或变量在 Microsoft SQL Server 中将占用多少空间? 在回答这个问题之前,你应该弄清楚面试官在这里所说的空间是什么意思,他指的是空间还是用来在磁盘中以字节为单位存储这些值的内存。
如果是,那么你可以说它不是常数,它取决于你存储的值。 如果没有存储任何内容,即空字符串,则至少需要 2 个字节来存储 varchar(2) 值,如果在其上存储 2 个字符,则最多需要 2+2 = 4 个字节。
例如,如果有一个名为“Enabled VARCHAR(1) ”的列并存储“Y”或“N”等值,那么它将在磁盘中占用 3 个字节,一个用于数据,两个用于元数据。
VARCHAR(n) 列或变量中可以存储多少个字符?
与 VARCHAR
变量和列相关的第二个重要问题是关于它们可以存储多少个字符以及如果存储更多字符会发生什么情况?
有时,还会询问 VARCHAR(2)
列的限制或容量是多少? 你可以在那里存储多少个字符?
答案很简单,但对许多程序员来说却很棘手。 在 VARCHAR(2)
变量或列中,我们可以存储最多两个字符的字符串,例如 空字符串、一个字符串或两个字符的字符串都可以放在那里。
很多程序员因为 VARCHAR
就在这一点上搞糊涂了,他们认为因为是 varchar
,所以可以存储任意多的字符,但事实并非如此。 变量部分来自将值存储到磁盘中所需的实际内存,例如 存储更少的字符需要更少的内存,存储更多的字符需要更多的内存。
你应该在这里使用 CHAR 数据类型吗?
建议对小数据使用 CHAR
或固定长度数据类型,因为 VARCHAR
需要增加开销。 由于 CHAR
不需要 VARCHAR
存储元数据所需的额外 2 个字节,因此最好使用 CHAR(2)
而不是 VARCHAR(2)
,因为如果存储两个字符,CHAR(2)
将占用 2 个字节,但 VARCHAR(2)
将 占用四个字节。
选择正确的数据类型所节省的少量费用对于具有数百万条记录的大型表来说意义重大。
相关文章
使用 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() 的组合。
使用 Ubuntu 连接远程 MySQL 服务器的不同方法
发布时间:2023/05/09 浏览次数:97 分类:MySQL
-
在本文中我们将学习如何使用 Ubuntu 连接远程 MySQL 服务器来操作数据以及启动和停止 MySQL 服务器。
在 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)。