Mysql 数据库使用入门系列:Mysql 字段设计的原理和使用(一)
- 作者: 刘杰
- 来源: 技术那些事
- 阅读:105
- 发布: 2025-07-24 11:14
- 最后更新: 2025-07-27 12:13
今天咱们来谈谈 Mysql 数据库。最近正在更新一个系列的文章《Mysql 数据库使用入门系列》,想通过几个维度来讲解一下 Mysql 数据库的使用,应该如何才能快速度过新手期,帮助新手程序员快速掌握 Mysql 数据库的使用要点。今天主要针对 Mysql 字段设计的原理和使用进行一下深入讲解,如何正确的使用 Mysql 字段的类型,合理创建数表。
Mysql 的发展史
MySQL 最初由瑞典公司 MySQL AB 开发,在发展过程中遵循开源许可协议(主要是 GPL 协议),允许用户自由使用、修改和分发其源代码。
2008 年,Sun 公司收购了 MySQL AB;2010 年,Oracle 公司又收购了 Sun 公司,此后 MySQL 成为 Oracle 旗下的产品。但即便在被收购后,MySQL 依然保持开源特性,其社区版(MySQL Community Edition)继续以开源形式提供,供开发者和企业免费使用。
不过,Oracle 也推出了 MySQL 的商业版(MySQL Enterprise Edition),包含额外的商业支持和高级功能,这部分是收费的。但核心的数据库功能和社区版始终保持开源属性,这也是 MySQL 能够广泛普及和应用的重要原因之一。
Mysql 字段的使用
相信大多数程序员,都是用过 Mysql 这款数据库软件。我们今天的主题,是 Mysql 数据库的字段详细说明,主要为新手程序员提供一些入门的指引和参考。
MySQL 中字段长度的设定与字段类型密切相关,不同数据类型的长度含义和限制不同。以下是常见字段类型的长度说明:
常用的 Mysql 字段
1. 数值类型(如 INT、BIGINT 等)
-
长度不代表存储范围,而是用于指定显示宽度(配合
ZEROFILL
使用时生效)。 - 例如:
INT(10)
与INT(5)
存储范围相同(-2147483648 到 2147483647),仅当使用ZEROFILL
时,前者会用 0 填充至 10 位显示(如000123
)。 - 常用数值类型的默认 / 推荐长度:
-
TINYINT(4)
、SMALLINT(6)
、INT(11)
、BIGINT(20)
(括号内为默认显示宽度)。
-
2. 字符串类型(如 CHAR、VARCHAR)
-
长度代表可存储的字符数(受字符集影响,如 UTF8mb4 中一个字符可能占 1-4 字节)。
-
CHAR(n):固定长度,不足时用空格填充,n 范围 0-255。
- 例:
CHAR(10)
始终占用 10 个字符的存储空间。
- 例:
-
VARCHAR(n):可变长度,n 范围 0-65535(但实际受行总长度限制)。
- 例:
VARCHAR(255)
最多存储 255 个字符,存储时额外占用 1-2 字节记录长度。
注意:
n
指字符数而非字节数,例如 UTF8mb4 编码下,VARCHAR(255)
最多占用 255×4 + 2 = 1022 字节。 - 例:
3. 二进制类型(如 BINARY、VARBINARY)
-
长度代表字节数,与字符集无关。
-
BINARY(n)
:固定长度二进制,n
范围 0-255。 -
VARBINARY(n)
:可变长度二进制,n
范围 0-65535(实际受行限制)。例:
VARBINARY(16)
可存储 16 字节的二进制数据(如 IPv6 地址的二进制形式)。
4. 文本类型(如 TEXT、BLOB)
- 无需指定长度,按存储能力分等级:
-
TINYTEXT
/TINYBLOB
:最大 255 字节 -
TEXT
/BLOB
:最大 65535 字节(64KB) -
MEDIUMTEXT
/MEDIUMBLOB
:最大 16MB -
LONGTEXT
/LONGBLOB
:最大 4GB
-
- 注意:文本类型不适合建索引(或只能建前缀索引),查询效率较低。
5. 日期时间类型(如 DATE、DATETIME)
-
无需指定长度,长度固定:
-
DATE
:3 字节(格式YYYY-MM-DD
) -
TIME
:3 字节(格式HH:MM:SS
) -
DATETIME
:8 字节(格式YYYY-MM-DD HH:MM:SS
) -
TIMESTAMP
:4 字节(范围 1970-2038,受时区影响)
当然,好多时候我们也使用 unsigned int,或者 unsigned bigint 用来存储时间戳,或者到 1970-01-01 的毫秒数。
-
6. 枚举(ENUM)和集合(SET)
-
ENUM('值1','值2',...)
:长度取决于枚举值数量(1-2 字节,最多 65535 个值)。 -
SET('值1','值2',...)
:长度取决于集合值数量(1-8 字节,最多 64 个值)。
不同类型字段使用的原则
- 长度设定需匹配实际需求(如手机号用
CHAR(11)
而非VARCHAR(255)
),避免浪费空间。 - 行总长度限制:InnoDB 表中,一行数据(不包括 TEXT/BLOB)默认最大 65535 字节。
- 字符集影响:UTF8mb4 比 UTF8 占用更多字节,设计时需预留空间。
好啦,关于 MySQL 字段使用今天就先说到这儿啦。
其实刚开始接触这些字段类型,觉得绕是很正常的 —— 啥时候用 INT,啥时候用 VARCHAR,长度又该咋设,确实得琢磨琢磨。但你也别慌,记住一个大原则:先想清楚你要存啥数据(是数字、文字,还是日期?),再看这数据大概有多长、会不会经常变,然后对着咱们说的那些类型挑就行。
刚开始可能会选错,没关系,多试几次,看报错、查日志,慢慢就有感觉了。比如存手机号,你试试用 INT 存会出啥问题?存文章内容,用 VARCHAR 和 TEXT 又有啥不一样?多动手试试,比死记硬背强多了。
后边咱们再接着聊些更具体的场景和小技巧,干程序员,就得一步一步来,不能着急~ 数据库这东西,基础打扎实了,后面写代码、调性能都会顺很多。