数据库字段长度多少才是合理的

简介: 设计数据库时经常要做的就是给字段设置数据类型,但是对于一些字段是需要设置长度的,那么需要设置多少长度才算是合适的?


前言

想起来前几年在某东XXX部门的面试的时候,面试官考察了这样一个面试题:根据一个场景设计数据库和一些简单的 SQL 查询的语句。其实还算是一个很简单的工作。但当时他还问了我一个问题:某字段的字符串类型长度为什么要给它10呢?

整数类型

整数数据类型有五个:tinyint ,smallint ,mediumint , int ,bigint ,但平常使用比较多可能就是 int(n) 。其中 n 表示的是占位宽度。

占位宽度?不太理解这个定义是什么?是不是指最大允许显示数字的长度呢?下面通过数据库简单实践下看看是什么样的结果。

设置某个字段,整型且设置为填充零。

当给 userCode 设置值为12 时,会自动填充2位零,当设置为11111时就没有填充零,也没有减少位数,还是5个1的长度

所以很明显,这个占位宽度其实就是显示长度,如果数据宽度小于 n 时就会自动补零,但它如果大于 n 时就会正常显示。

那 n 会限制存储吗?答案是不会。int 类型占用空间是 4 个字节,无论 n值是多少,其占用的空间还是4个字节,不会因为 n 变化而影响。因为我们存储数据在电脑磁盘中其实最终的存储都是以0和1组成串进行存储的。每一个0或者1都是成为1位。1个字节=8位,所以整型 int 4个字节,差不多允许支持32位。

所有由 32位0或1 可以组合出来情况有 232 ,这个就是 int 类型允许的取值范围(无符号)。如果是有符号的,第一位是表示符号,取值范围就是-2-31~231 -1。所以只要值在这个范围内,n 长度无论多长多短,短了补零,长了还是不变。长度 N和存储完全没关系。

字符串类型

数据库中字符串类型只有两种:CHAR(n) 和 VARCHAR(n)。其中 n 表示的是该字段最大可容纳的字符数。简单说就是字符长度。

像字母、数字、运算符号、标点符号和其他符号都是表示字符。字符串就是由字符组成的。可以通过数据库实践一下,设置某个字段为字符串类型,varchar(10)。再 insert 一个长度大于10的字符串时就会报错:“Data too long for column xxxx ”。

所以字符串的 n 和整型还是不一样的。需要注意:字符不是字节。

所以遇到一开始说的那个问题时,个人觉得回答还是要根据场景来回答:比如可能一个code 长度不需要太长可以设置 n=10;name 的值都不会太长时,长度可以设置为 50 。为什么要设置长度为10就是因为考虑该字段存的长度不会超过10位。

参考资料:

https://zhuanlan.zhihu.com/p/111028232

目录
打赏
0
0
0
0
44
分享
相关文章
获取数据库中字段的数据作为下拉框选项
获取数据库中字段的数据作为下拉框选项
59 5
Discuz! X 数据库字典详解:DZ各数据表作用及字段含义
我们使用DISCUZ做网站时,有时需要对数据表进行操作,在操作数据表之前,需要对数据表进行了解。下面是DISCUZ 数据库各数据表作用及字段含义详解,方便新手更好的了解DISCUZ数据库。
87 4
MySQL数据库中给表添加字段并设置备注的脚本编写
通过上述步骤,你可以在MySQL数据库中给表成功添加新字段并为其设置备注。这样的操作对于保持数据库结构的清晰和最新非常重要,同时也帮助团队成员理解数据模型的变化和字段的具体含义。在实际操作中,记得调整脚本以适应具体的数据库和表名称,以及字段的详细规范。
120 8
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
122 0
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
544 0
实体类的字段和数据库中的字段不一致、并且没有做中间替换、会发生什么
这篇文章讨论了实体类字段与数据库字段不一致时可能导致的问题,作者通过实际案例展示了字段不匹配时查询无法正确执行,并说明了修正字段匹配后查询可以成功执行的情况。
实体类的字段和数据库中的字段不一致、并且没有做中间替换、会发生什么
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
ASP.NET Web Api 使用 EF 6,DateTime 字段如何取数据库服务器当前时间
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
93 2

热门文章

最新文章