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

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


前言

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

目录
相关文章
|
19天前
|
关系型数据库 MySQL 数据库
往数据库的字段varchar 或datetime里存时间值
往数据库的字段varchar 或datetime里存时间值
124 0
|
8月前
|
前端开发 Java 关系型数据库
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
【Mybatis-Plus】mybatisplus更新时,实体字段为空,数据库不更新的解决方案
263 0
|
19天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
37 0
|
19天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
4天前
|
监控 关系型数据库 数据库
关系型数据库识别常查询字段
【5月更文挑战第20天】
17 4
|
5天前
|
监控 关系型数据库 数据库
|
19天前
|
数据库
数据库字段
数据库字段
|
19天前
|
分布式计算 关系型数据库 大数据
MaxCompute产品使用合集之怎么才可以将 PostgreSQL 中的 geometry 空间类型字段同步到 MaxCompute 或另一个 PostgreSQL 数据库
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
19天前
|
SQL 关系型数据库 MySQL
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示
32 2
|
19天前
|
小程序 数据库
【微信小程序7】云数据库:利用Field获取指定字段的值。
【微信小程序7】云数据库:利用Field获取指定字段的值。
59 2