MySQL中数据类型的长度问题总结

MySQL中数据类型的长度问题总结

大家好,我又回来了,这两个星期忙着做项目实训作业,没更博客。
放寒假了,先预祝大家狗年大吉!
在初次接触Mysql的时候,虽然会用,但是只是照着老师或者跟着视频敲来实现功能,并没有什么自己思考的意思,结果导致会用,但是说不出来的所以然。我简单总结了几个常用的数据类型长度的问题:

1):int类型,对吧,经常像保存个时间戳啊、id啊、数量啊、排序啊都会用到
提问:INT(11)是什么意思?最大保存十一位数么?
回答:不是楞个回事,听我给你摆,首先长度,也就是INT(M),M指示最大显示宽度,不是说限制你只能插入规定长度的数据,如果不信你试一下:INT(1),你可以插数字1,也可以插100,1000。那到底是撒子意思耶?MySQL手册上头说的清清楚楚:

M指示最大显示宽度,最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关

好,这下晓得的撒?我们指定的INT(10)、INT(11)是指定显示宽度,不是存储大小或者值的范围,再看一个例子:
INT(3)的情况下 插入数字20,和数字2以及数字200,显示结果为:
020;
002;
200;

MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(3))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

说白了就是你设定最大宽度,插入的数据不够大,就从填充0,给你填满,够大就随便你,不得管你。这下就很通透了撒,哈哈~(但是强烈建议合理分配,过大过小都不好)
Tip: 对于int类型的,如果不需要存取负值,最好加上UNSIGNED;对于经常出现在WHERE语句中的字段,考虑加索引,整形尤其适合加索引。


2):VARCHAR和CHAR

### MySQL 数据类型及其长度限制 #### 数值类型 数值类型用于存储整数和浮点数。以下是常见的数值类型及其长度限制: - **TINYINT**: 占用 1 字节,范围为 -128 到 127 (有符号) 或者 0 到 255 (无符号)[^2]。 - **SMALLINT**: 占用 2 字节,范围为 -32768 到 32767 (有符号) 或者 0 到 65535 (无符号)。 - **MEDIUMINT**: 占用 3 字节,范围为 -8388608 到 8388607 (有符号) 或者 0 到 16777215 (无符号)[^2]。 - **INT/INTEGER**: 占用 4 字节,范围为 -2147483648 到 2147483647 (有符号) 或者 0 到 4294967295 (无符号)。 - **BIGINT**: 占用 8 字节,范围为 -9223372036854775808 到 9223372036854775807 (有符号) 或者 0 到 18446744073709551615 (无符号)。 对于浮点数: - **FLOAT**: 单精度浮点数,占用 4 字节。 - **DOUBLE**: 双精度浮点数,占用 8 字节。 #### 字符串类型 字符串类型用于存储文本数据。以下是常见字符串类型及其长度限制: - **CHAR(M)**: 定长字符串,最大长度为 255 个字符。无论实际存储多少字符,始终占用固定空间。 - **VARCHAR(M)**: 可变长度字符串,最大长度为 65,535 字节。具体取决于字符集编码,例如 UTF8 编码下最多支持约 21,844 个字符[^5]。 - **TEXT**: 存储较大的文本数据,最大长度为 65,535 字节 (即 2¹⁶−1)。 - **MEDIUMTEXT**: 支持更大的文本数据,最大长度为 16,777,215 字节 (即 2²⁴−1)。 - **LONGTEXT**: 能够存储非常大的文本数据,最大长度为 4,294,967,295 字节 (即 2³²−1)[^2]。 #### 日期和时间类型 日期和时间类型专门用于存储时间和日期信息。以下是常用的时间类型及其特性: - **DATE**: 格式为 YYYY-MM-DD,范围从 '1000-01-01' 至 '9999-12-31'。 - **DATETIME**: 格式为 YYYY-MM-DD HH:MM:SS,范围从 '1000-01-01 00:00:00' 至 '9999-12-31 23:59:59'。 - **TIMESTAMP**: 表示 UTC 时间戳,范围从 '1970-01-01 00:00:01'UTC 至 '2038-01-19 03:14:07'UTC。 - **TIME**: 格式为 HH:MM:SS,有效范围为 '-838:59:59' 至 '838:59:59'。 #### 大对象类型 大对象类型主要用于存储大量二进制或文本数据。以下是这些类型的长度限制: - **BLOB/MEDIUMBLOB/LONGBLOB**: 类似于 TEXT/MEDIUMTEXT/LONGTEXT,分别对应不同的大小限制,分别为 65KB、16MB 和 4GB。 需要注意的是,当表的设计超过特定的行尺寸时会引发错误。例如,“Row size too large”的问题通常是因为某些列未被优化成 BLOB 或 TEXT 类型所致[^4]。 #### 特殊注意事项 在设计数据库时,应当注意字段的实际需求与所选数据类型的匹配程度。即使指定了较长的数据类型长度,也不意味着每次都会消耗那么多的空间;实际上,只有真正写入的内容才会占据相应存储位置[^1]。此外,在涉及多字节字符集(如 utf8mb4)的情况下,需额外考虑单个字符可能占用多个字节的情况。 ```sql CREATE TABLE example ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` 上述 SQL 创建了一个简单的表格 `example`,其中包含了自动增长的主键 ID (`id`)、可容纳多达 255 个四字节宽字符的名字字段(`name`)以及记录创建时间并能随更新改变的时间戳字段(`created_at`)。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值