迹忆客 专注技术分享

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

SQL Server 中的 VARCHAR(n) 列允许多少个字符? VARCHAR 变量在磁盘中占用多少空间?

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

在任何编程面试中,SQL 的常见问题之一是 SQL 中的 VARCHARCHAR 数据类型有什么区别? 特别是当我们的项目使用 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) 将 占用四个字节。

选择正确的数据类型所节省的少量费用对于具有数百万条记录的大型表来说意义重大。

转载请发邮件至 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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便