Mysql系列 - 数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

数值类型

类型 存储字节数 范围(有符号) 范围(无符号) 用途
TINYINT 1 -2^7 ~ 2^7 - 1 0 ~ 2^8 - 1 小整数值
SMALLINT 2 -2^15 ~ 2^15 - 1 0 ~ 2^16 - 1 大整数值
MEDIUMINT 3 -2^23 ~ 2^23 - 1 0 ~ 2^24 - 1 大整数值
INT或INTEGER 4 -2^31 ~ 2^31 - 1 0 ~ 2^32 - 1 大整数值
BIGINT 8 -2^63 ~ 2^63 - 1 0 ~ 2^64 - 1 极大整数值
FLOAT 4 -3.402823466E+38 ~ -1.175494 351E-38)
0
1.175494351E-38 ~ 3.402823466351E+38
0
1.175494351E-38 ~ 3.402823466E+38
单精度 浮点数值
DOUBLE 8 -1.7976931348623157E+308 ~ -2.225073858507201 4E-308
0
2.2250738585072014E-308 ~ 1.7976931348623157E+308
0
2.2250738585072014E-308 ~ 1.7976931348623157E+308
双精度 浮点数值
DECIMAL DECIMAL(M,D) ,如果M>D,为M+2,否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

Double 和 Float 彼此的区别:

  • 在内存中占有的字节数不同,单精度内存占4个字节,双精度内存占8个字节

  • 有效数字位数不同(尾数),单精度小数点后有效位数7位, 双精度小数点后有效位数16位

  • 数值取值范围不同,根据IEEE标准来计算

  • 在程序中处理速度不同,一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

Double 和 Float 彼此的优缺点:

  • Float单精度

    • 优点:Float单精度在一些处理器上比Double双精度更快而且只占用Double双精度一半的空间
    • 缺点:但是当值很大或很小的时候,它将变得不精确
  • Double双精度

    • 优点:Double 跟 Float比较, 必然是 Double 精度高,尾数可以有 16 位,而 Float 尾数精度只有 7 位
    • 缺点:Double 双精度是消耗内存的,并且是 Float 单精度的两倍,Double 的运算速度比 Float 慢得多,因为Double 尾数比Float 的尾数多,所以计算起来必然是有开销的

日期/时间类型

类型 存储字节数 范围 格式 用途
DATE 3 1000-01-01 ~ 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 ~ 838:59:59 HH:MM:SS 时间值或持续时间
YEAR 1 1901 ~ 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:01 UTC ~2038-01-19 03:14:07 UTC YYYYMMDD HHMMSS 混合日期和时间值,时间戳

字符串类型

类型 存储字节数 用途
CHAR 0 ~ 255 定长字符串
VARCHAR 0 ~ 65535 变长字符串
TINYBLOB 0 ~ 255 不超过 255 个字符的二进制字符串
TINYTEXT 0 ~ 255 短文本字符串
BLOB 0 ~ 65535 二进制形式的长文本数据
TEXT 0 ~ 65535 长文本数据
MEDIUMBLOB 0 ~ 16777215 二进制形式的中等长度文本数据
MEDIUMTEXT 0 ~ 16777 215 中等长度文本数据
LONGBLOB 0 ~ 4294967295 二进制形式的极大文本数据
LONGTEXT 0 ~ 4294967295 极大文本数据
ENUM 0 ~ 65535 枚举类型,只能存一个枚举字符串值

Read More:

MySQL 之数据类型

Chapter 11 Data Types

MySQL 数据类型