其他类型的占用长度一般都是固定的字节,而跟在类型后的 数字仅仅指定了数据的宽度,例如
int(5)
这里的 5 指的是数值的宽度,并不是字节,这些类型当你给定的长度超过了他本身限制时,当即就会向你抛出异常。
以下内容参考Mysql 官方数据类型说明,具体计算稍后会举例:
数字类型存储要求
数据类型 | 存储需求 |
---|---|
TINYINT | 1 个字节 |
SMALLINT | 2 个字节 |
MEDIUMINT | 3 个字节 |
INT, INTEGER | 4字节 |
BIGINT | 8 个字节 |
FLOAT§ | 如果 0 <= p<= 24则为 4 个字节,如果 25 <= p<= 53则为 8 个字节 |
FLOAT | 4字节 |
DOUBLE [PRECISION], REAL | 8 个字节 |
DECIMAL(M,D), NUMERIC(M,D) | 变化; 见以下讨论 |
BIT(M) | 大约 ( M+7)/8 字节 |
对值DECIMAL(和 NUMERIC)列使用二进制格式,包9个十进制(基体10)的数字成四个字节表示。
每个值的整数和小数部分的存储分别确定。
每个九位数字的倍数需要四个字节,而“剩余” 数字需要四个字节的一部分。下表给出了多余数字所需的存储空间。
剩余数字 | 字节数 |
---|---|
0 | 0 |
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 3 |
6 | 3 |
7 | 4 |
8 | 4 |
日期和时间类型存储要求
对于TIME、 DATETIME和 TIMESTAMP列,在 MySQL 5.6.4 之前创建的表所需的存储空间与从 5.6.4 开始创建的表不同。这是由于 5.6.4 中的更改允许这些类型具有小数部分,这需要 0 到 3 个字节。
数据类型 | MySQL 5.6.4 之前需要存储 | MySQL 5.6.4 所需的存储空间 |
---|---|---|
YEAR | 1 个字节 | 1 个字节 |
DATE | 3 个字节 | 3 个字节 |
TIME | 3 个字节 | 3 字节 + 小数秒存储 |
DATETIME | 8 个字节 | 5 字节 + 小数秒存储 |
TIMESTAMP | 4字节 | 4 字节 + 小数秒存储 |
从 MySQL 5.6.4 开始,存储 YEAR和 DATE保持不变。
但是, TIME、 DATETIME和 TIMESTAMP的表示方式不同。DATETIME更有效地打包,非小数部分需要 5 个字节而不是 8 个字节,并且所有三个部分都有一个小数部分,需要 0 到 3 个字节,具体取决于存储值的小数秒精度。
小数秒精度 | 存储需要 |
---|---|
0 | 0 字节 |
1, 2 | 1 个字节 |
3、4 | 2 个字节 |
5、6 | 3 个字节 |
例如,TIME(0)、 TIME(2)、 TIME(4)和 分别 TIME(6)使用 3、4、5 和 6 个字节。TIME并且 TIME(0)是等效的并且需要相同的存储空间。
有关时间值的内部表示的详细信息,请参阅MySQL 官方文档:重要算法和结构
抱歉,参考资料中没有给出MySQL出错的具体提示信息,因此无法确定出错的原因。请提供更详细的错误提示信息和相关的代码,以便更准确地定位问题。