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

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


前言

想起来前几年在某东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

目录
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
往数据库的字段varchar 或datetime里存时间值
往数据库的字段varchar 或datetime里存时间值
118 0
|
6月前
|
前端开发 Java 关系型数据库
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
257 0
|
24天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
8天前
|
SQL 关系型数据库 MySQL
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
18 2
|
1月前
|
SQL 关系型数据库 MySQL
Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
10 0
|
2月前
|
SQL 数据库管理
sqlite语句order by两个字段同时排序处理
sqlite语句order by两个字段同时排序处理
21 0
|
7月前
|
存储 数据库
ABAP 数据库表 Size Category 字段的准确含义
ABAP 数据库表 Size Category 字段的准确含义
61 0
|
7月前
|
存储 JSON BI
如何使用事物码 SAT 查找某个 SAPGUI 屏幕字段对应的后台存储数据库表的名称试读版
如何使用事物码 SAT 查找某个 SAPGUI 屏幕字段对应的后台存储数据库表的名称试读版
53 0
|
3月前
|
SQL 关系型数据库 MySQL
数据库字段基本类型
数据库字段基本类型
55 0
|
4月前
|
数据库
Discuz模板中调用数据库的某个字段的方法
Discuz模板中调用数据库的某个字段的方法
26 0

热门文章

最新文章