【MySQL】支持的数据类型

建表原则:使用可以正确存储数据的最小数据类型。为每一列选择合适的字段类型:

1.数值类型

1.1 整型

整数类型 占用字节 范围
TINYINT 1 有符号:[-128,127] 或无符号:[0,255]
SMALLINT 2 有符号:[-32768,32767]或无符号:[0,65535]
MEDIUMINT 3 有符号:[-8333608,8388607]或无符号:[0,1677215]
INT、INTEGER 4 有符号:[-21亿多,21亿多]或无符号:[0,42亿多]
BIGINT 8 很大,19位数字的范围

INT有5种类型,不同的类型的最大存储范围是不一样的。性别?用TINYINT,因为ENUM也是整型存储。

1)所有整数类型都有一个可选的属性UNSIGNED(无符号),此时上限取值是原来的2倍
在这里插入图片描述

2)还有一个属性是AUTO_INCREMENT(自增),该属性只能用于整数类型

1.2 浮点型

属性 存储空间 精度 精确性 说明
FLOAT(M, D) 4 bytes 单精度 非精确 单精度浮点型,m总个数,d小数位
DOUBLE(M, D) 8 bytes 双精度 比Float精度高 双精度浮点型,m总个数,d小数位

注意, FLOAT 容易造成精度丢失

1.3 定点数 DECIMAL

1)高精度的数据类型,常用来存储交易相关的数据

2)DECIMAL(M,N)

  • M 代表总精度
  • N 代表小数点右侧的位数(标度)
  • -1 < M < 254, 0 < N < 60

3)存储空间变长

2.字符串类型

类型 单位 最大 特性
CHAR 字符 最大为255字符 存储定长,容易造成空间的浪费
VARCHAR 字符 可以超过255个字符 存储变长,节省存储空间
TEXT 字节 总大小为65535字节,约为64KB -

1)MySQL默认为 utf-8,那么在英文模式下1个字符=1个字节,在中文模式下1个字符=3个字节。

2)TEXT 在 MySQL 内部大多存储格式为溢出页,效率不如 CHAR

3)字符类型变长情况下,VARCHAR 更节省空间,但是对于 VARCHAR 字段,需要一个字节来记录长度。所以,固定长度的用 CHAR ,不要用 VARCHAR 。

扫描二维码关注公众号,回复: 12591025 查看本文章

3.时间类型

类型 字节 表示形式
DATE 3字节 yyyy-mm-dd 2011-11-11
TIME 3字节 hh:mm:ss 11:11:00
DATETIME 8字节 yyyy-mm-dd hh:mm:ss 2011-11-11 11:11:00
TIMESTAMP 4字节 yyyy-mm-dd hh:mm:ss 2011-11-11 11:11:00

timestamp 翻译为汉语即"时间戳",它是当前时间到 Unix元年(1970 年 1 月 1 日 0 时 0 分 0 秒)的秒数。对于某些时间的计算,如果是以 datetime 的形式会比较困难,假如我是 2011-11-11 11:11:00 出生,现在的时间是 2020-01-01 10:04:50,那么要计算我活了多少秒钟用 datetime 还需要函数进行转换,但是 timestamp 直接相减就行。

1)MySQL 在 5.6.4 版本之后,TIMESTAMP 和 DATETIME 支持到微秒

2)存储范围的区别

  • TIMESTAMP 存储范围:1970-01-01 00::00:01 to 2038-01-19 03:14:07
  • DATETIME 的存储范围:1000-01-01 00:00:00 to 9999-12-31 23:59:59

3)TIMESTAMP 和 DATETIME 可以接受的入参形式

// 下面都是 MySQL 允许的形式,MySQL 会自动处理
2011-11-11 20:48:59
2011#11#11 20/48/59
20111111204859

4)如果存进去的是 NULL,TIMESTAMP 会自动储存当前时间,而 DATETIME 会储存 NULL

5)TIMESTAMP 会根据系统时区进行转换,DATETIME 则不会,所以,一般使用 TIMESTAMP 国际化

6)注意,如存时间戳使用数字类型 BIGINT

注意,非空字段尽量定义成 NOT NULL,提供默认值,或者使用特殊值、空串代替null。NULL类型的存储、优化、使用都会存在问题。

猜你喜欢

转载自blog.csdn.net/weixin_43935927/article/details/114005397
今日推荐