文章目录
mysql数据类型精讲
关于属性character set name
character set name
创建表,指定表中的字段时,可以指定字段的字符集
SHOW VARIABLES LIKE 'character_%';
整数类型
整数类型一共有五种:
括号内表示的是显示数据的宽度,比如tinyint,-128的宽度是4
单写(5)没有意义。要配合ZEROFILL使用
ZEROFILL显示宽度为5,当insert的值不足5位时,使用0填充
当使用ZEROFILL时,自动添加UNSIGNED
mysql8以后不会再显示宽度了
适用场景:
浮点数,定点数与位类型
浮点数
FLOAT表示单精度浮点数
DOUBLE表示双精度浮点数
REAL默认是DOUBLE,如果把SQL模式设定为“REAL_AS_FLOAT”,那么MYSQL就认为REAL是FLOAT,如果要启用”REAL_AS_FLOAT“,通过以下SQL语句实现:
SET sql_mode = "REAL_AS_FLOAT"
没办法四舍五入
测试FLOAR与DOUBLE的精度问题
十进制数字转化为二进制数字的操作:
具体详细见博客https://blog.csdn.net/qq_36915078/article/details/106019023
为什么会造成这种精度误差呢?
定点数
如果用到浮点数要特别注意误差问题,因为浮点数不准确,所以我们要避免使用=来判断两个数是否相等。
在一些对精确度要求较高的项目中,千万不要使用浮点数,不然会导致结果错误,甚至是不可挽回的损失。MYSQL有精准数据类型,就是定点数类型:DECIMAL。
DECIMAL(M,D)的最取值范围与DOUBLE类型一样
定点数在MySQL内部是以字符串形式进行存储的,这就决定了它一定是精准的。
DECIMAL默认是DECIMAL(10,0)。当数据的精度超出了定点数类型的精度范围时,则MYSQL同样会进行四舍五入处理。
MYSQL8.0依旧显示()
添加数据超过精度范围依旧四舍五入,和float,double类似。
位类型
BIT类型中存储的是二进制值,类似010110。
16进制展示
因为2占两位,f1默认只有1位
函数BIN() 用二进制展示数据,HEX() 用16进制展示数据
显示十进制
日期与时间类型
YEAR类型
DATE类型
TIME类型
DATETIME类型
TIMESTAMP类型
对比DATETIME和TIMESTAMP
修改当前时区
SET time_zone = '+9:00';
然后再查询
开发经验:
文本字符串类型
CHAR与VARCHAR类型
声明的是字符长度,实际存储长度是根据字符集定的
这里5代表5个字符的意思
存储很短的信息,比如门牌号101,102等,这样很短的信息用char,因为varchar还要占个byte用于存储信息长度,本来打算节约存储,结果得不偿失。
固定长度的,比如使用uuid作为主键,那用char应该更合适,因为固定长度,varchar动态根据长度的特性就消失了,而且还要占一个长度信息。
十分频繁更改的字段,由于varchar每次存储都要有额外的计算得到长度等工作,如果一个非常频繁的改变,那就需要有很多精力用于计算,而这些对于char来说是不需要的,
具体存储引擎情况:
TEXT类型
注意:在保存和查询数据时,并没有删除TEXT类型的数据尾部的空格。
ENUM类型
SET类型
二进制类型与JSON类型
二进制字符串类型
JSON类型
提取json中的值