mysql的数据类型

Java中:
1、基本数据类型
byte,short,int,long,float,double,char,boolean

2、引用数据类型
类、接口、枚举、数组、注解

if(xx == null)

BigInteger
BigDecimal

MySQL中:
1、整数类型
tinyint:微小整数
smallint:小整数
mediumint:中整数
int,integer:整数
bigint:大整数

int unsigned:无符号整数,没有负数
int(M) :如果单独使用,没意义
int(M) zerofill:这样指定宽度才有意义
例如:int(4) zerofill 当我存储的整数值是20,那么它会实际存储 0020
如果你写了zerofill,就意味着无符号

2、浮点型
float,double
float(M,D):M是说总的宽度,D是指定小数点后几位
double(M,D)

float(5,2):表示的数据范围是在[-999.99,999.99]范围。

也可以加unsigned,
float(5,2) unsigned:无符号小数,没有负数,它表示的范围[0,999.99]

3、定点型
DECIMAL
DECIMAL(M,D)
NUMERIC也可以这么写。

4、日期时间类型
date:存日期
time:存时间
datetime:存日期和时间
year:存年
timestamp:时间戳,也是可以存日期时间

timestamp和datetime的区别:
(1)timestamp会按照时区显示,因为它是存储毫秒值
(2)日期范围:timestamp 1970-2038
datetime 1000-9999

5、字符串类型(mysql没有字符类型,全部是字符串类型)
char:定长字符串
char:默认长度为1
char(M):长度为M
例如:char(5),实际按照5个字符的宽度来存储,如果不够5个,默认用u0000填充
"张三" ,实际 u0000u0000u0000张三
varchar:变长字符串
varchar(M):必须指定M
例如:varchar(20),实际按照几个字符存储,看你数据有几个字符
"张三",实际存2个字符 + 1个字节(记录字符的实际长度)
text:长文本


定长好还是变长好:
char的好处:不用计算字符数,固定几个几个一读,虽然会浪费一些空间,但是速度快
varchar的好处:节省空间,每次读写要计算字符数

什么情况下选择char?
(1)你的数据是定长,例如:手机号,学号,身份证号,订单号
(2)频繁修改和查询

当然,现在mysql5.5以后对varchar做了很多优化,现在的效率也还好,除了上面的两种,其他的都选varchar

6、二进制类型
bit:位类型,小二进制
xxblob:大二进制,一般二维码,小头像
xxxBINARY:字符串的二进制值

7、枚举、集合(了解)
枚举类型:几个中选一个
集合类型:几个中选多个,任意组合

8、特殊值
(1)在mysql中所有的类型,包括int都可以赋值为null
(2)mysql中关于null的判断
is null
is not null
<=> null
(3)所有运算符:+,-等遇到null值结果就为null

因此null值既影响运算,又影响我们的查询,所以尽量避免null值,可以用''或0等来代替。

原文地址:https://www.cnblogs.com/sunpengblog/p/10321416.html