数据库 ·

网易MySQL微专业学习笔记(一)-mysql数据类型

前言

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。

所有笔记可能不定期更新,发布时不一定为最终版。

网易MySQL微专业学习笔记(一)-mysql数据类型

正文

Number类型

整形
     TINYINT              1                  2的8次方
     INT                      4
     SMALLINT          2
     MEDIUMINT       3
     BIGINT               8
用户量大时推荐bignit
int(11)与int(21)
存储空间,还是存储范围有区别?
两者本质上没任何区别,11不会因为比21小,所占用的空间比21小,存储范围也不会小。只在某些显示上可能会有些不同。
若存1,其他位数会自动补0,int(11)补10,21补20个。

浮点型

float 4字节 单精度 非精准
double 8字节 双精度 比float精度高
两者均是非精确的数据类型
精度丢失的问题
精度丢失--如工资被四舍五入等
定点数-更精确的数据类型
DECIMAL
  • 高精度的数据类型,常用来存储交易相关的数据
  • DECIMAL(M,N)M代表总精度,N代表小数点右侧的位数(标度)
  • 1<M<254,0<N<60
  • 存储空间变长
tinyint 非常适合存储性别
enum枚举类型会根据所定义值的总量变长。
性别、省份
首选 tinyint,在之后char,也可以enum

经验之谈:

存储性别、省份、类型等分类信息时选择tinynit或者enum
bigint存储空间更大,int和bignit之间通常选择bigint.
交易等高精度数据时选择使用decimal.
存储用户名的属性
char与varchar
存储单位都是字符
字符与字节的区别
utf8mb4(四字节) 若utf8(3字节)能乘下,就
java程序支持emoji表情
  • mysql版本>5.5.3
  • JDBC驱动版本>5.1.13
  • 库和表的字符集设为utf8mb4
char存储定长,容易造成空间的浪费。
varchar存储变长,节省存储空间
例外:当仅存储n时,
char比varchar节省空间--极端情况。
text与char和varchar区别
char和varchar存储单位为字符
text存储单位为字节,总大小为65535字节,约64kb
char数据类型最大255字符。
varchar数据类型为变长存储,可以存储超过255个字节。
text在数据库内部大多存储格式为溢出页,效率不如char
blob、binary虽然可以,但不推荐。

经验之谈:

char与varchar定义的长度是字符串长度不是字节长度。
存储字符串推荐选择使用varchar(N),N尽量小。
虽然数据库可以存储二进制数据,但是性能低下,不要使用数据库存储文件音频等二进制数据,

存储生日信息

date
存储空间
     三字节,如:2015-01-01
存储精度
     年月日
time
    三字节,如:11:12:00
     时分秒
datetime
     八字节,如:2015-01-01 11:12:00
     包含date与time
     存储范围:1000-01-01 00:00:00 to 9999-12-31 23:59:59
timestamp
     四字节,如:2015-01-01 11:12:00
     包含date与time
     存储范围:1970-01-01 00:00:01 to 2038-01-19 03:14:07
mysql在5.6.4版本后,timestamp与datetime支持到微秒。
字段类型与时区的关联关系
timestamp会根据系统时区进行转换,datatime则不会。
国际化系统推荐使用timestamp。
bigint

如何存储时间类型

应用程序将时间转化为数字类型
from_unixtime()可将biginit类型的数字转为时间。
unix_timestamp()将时间转为bigint

经验之谈:

date和time类型精度较低
bigint类型也可以存储时间
数据类型选型,按需选择
bigint--可读性较差

参与评论