Mysql 数据库使用入门系列:Mysql 字段设计的原理和使用(一)

今天咱们来谈谈 Mysql 数据库。最近正在更新一个系列的文章《Mysql 数据库使用入门系列》,想通过几个维度来讲解一下 Mysql 数据库的使用,应该如何才能快速度过新手期,帮助新手程序员快速掌握 Mysql 数据库的使用要点。今天主要针对 Mysql 字段设计的原理和使用进行一下深入讲解,如何正确的使用 Mysql 字段的类型,合理创建数表。

Mysql 的发展史

mysql的发展史.jpg

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 个值)。

不同类型字段使用的原则

  1. 长度设定需匹配实际需求(如手机号用 CHAR(11) 而非 VARCHAR(255)),避免浪费空间。
  2. 行总长度限制:InnoDB 表中,一行数据(不包括 TEXT/BLOB)默认最大 65535 字节。
  3. 字符集影响:UTF8mb4 比 UTF8 占用更多字节,设计时需预留空间。

好啦,关于 MySQL 字段使用今天就先说到这儿啦。

其实刚开始接触这些字段类型,觉得绕是很正常的 —— 啥时候用 INT,啥时候用 VARCHAR,长度又该咋设,确实得琢磨琢磨。但你也别慌,记住一个大原则:先想清楚你要存啥数据(是数字、文字,还是日期?),再看这数据大概有多长、会不会经常变,然后对着咱们说的那些类型挑就行。

刚开始可能会选错,没关系,多试几次,看报错、查日志,慢慢就有感觉了。比如存手机号,你试试用 INT 存会出啥问题?存文章内容,用 VARCHAR 和 TEXT 又有啥不一样?多动手试试,比死记硬背强多了。

后边咱们再接着聊些更具体的场景和小技巧,干程序员,就得一步一步来,不能着急~ 数据库这东西,基础打扎实了,后面写代码、调性能都会顺很多。