数据类型

  • 数值类型:
  • 字符类型:
  • 枚举类型
  • 日期时间类型:

数值类型

整数类型

类型有符号无符号大小(Bytes)用途
TINYINT(-128, 127)[0, 255]1非常小的整数值
SMALLINT(-32768, 32767)[0, 65535]2较小的整数值
MEDIUMINT-8388608, 8388607[0, 2^24-1]3中等大小整数值
INT 或 INTEGER(-2 147 483 648,2 147 483 647)[0, 2^32-1]4标准整数
BIGINT[0, 2^64-1]8较大整数值

小数类型

类型有符号无符号大小(Bytes)用途
FLOAT4单精度
浮点数值
DOUBLE8双精度
浮点数值
DECIMAL(M, D)依赖于 M 和 D 的值m可以存储大整数或高精度,可以理解为字符串处理

UNSIGNED

UNSIGNED 属性只针对整型,表示无符号的意思(相当于禁用负值)。

取值范围如果加了 UNSIGNED,则最大值翻倍,例如,TINYINT 类型最大是 127,那 TINYINT UNSIGNED 最大就可以到 127 * 2 => 255

字符串类型

类型大小(Bytes)用途
CHAR0-255定长字符串
VARCHAR0-65535可变长字符串
TINYBLOB0-255不超过 255 个字符的二进制字符串
TINYTEXT0-255短文本字符串
BLOB0-65535二进制形式的长文本数据
TEXT0-65535长文本数据
MEDIUMBLOB0-16777215二进制形式的中等长度文本数据
MEDIUMTEXT0-16777215中等长度文本数据
LONGBLOB0-4294967295二进制形式的极大文本数据
LONGTEXT0-4294967295极大文本数据

注意事项:

  1. CHAR(n)VARCHAR(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符
  2. CHAR(n) 若存入字符数小于 n,则以空格补于其后,查询之时再将空格去掉,所以 CHAR 类型存储的字符串末尾不能有空格
  3. VARCHAR 若存储内容超出设置长度,内容将被截断
  4. VARCHAR 是存入的实际字符数 +1 个字节(n <= 255)或 2 个字节(n > 255),所以 VARCHAR(4),存入 3 个字符要占用 4 个字节,CHAR 类型的字符串检索速度要比 VARCHAR 类型的快
  5. VARCHAR 可指定 nTEXT 不能指定,内部存储 VARCHAR 是存入的实际字符数 +1 个字节(n <= 255)或 2 个字节(n > 255),TEXT 是实际字符数 +2 个字节,TEXT 类型不能有默认值。
  6. BINARYVARBINARY 类似于 CHARVARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
  7. BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOBBLOBMEDIUMBLOBLONGBLOB。它们区别在于可容纳存储范围不同。

字符字节参考表

编码字符一个字母一个中文字符字母标点中文标点
ASCII 码1 字节
UTF-8 编码1 字节3 字节1 字节3 字节
Unicdoe 编码2 字节2 字节2 字节2 字节
GB 2312 编码或 GBK 编码1 字节2 字节1 字节2 字节
UTF-162 字节2 字节2 字节2 字节
UTF-324 字节4 字节4 字节4 字节
Latin11 字节1 字节

日期和时间类型

每个时间类型有一个有效值范围和一个”零“值,当指定不合法的 MySQL 不能表示的值时使用”零“值。

类型大小(Bytes)范围格式用途
DATE31000-01-01 / 9999-12-31YYYY-MM-DD日期值
TIME3-838:59:59 / 838:59:59HH:MM:SS时间值或持续时间
YEAR11901 / 2155YYYY年份值
DATETIME81000-01-01 00:00:00 / 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970-01-01 00:00:00 / 2038YYYYMMDD HHMMSS混合日期和时间值,时间戳

参考资料