引言
作为一个做Java后端的开发者,无论是在自己平时项目学习实战还是工作中的真实项目,都离不开和数据库打交道。而MySQL作为当今最流行的关系型数据库之一,也成为了我们必须掌握的一门技术。最近在工作项目中碰到过好几次MySQL数据类型相关问题,比如字段类型大小越界啦,字段类型长度不够啦pilipala......,所以今天抽空好好做个笔记总结一下。在这里呢只总结MySQL的数据类型的基本知识,不会牵扯到索引或存储引擎之类的知识(因为索引和存储引擎的知识足够写一本很厚很厚的书了)。
数值类型
其中对应于java中的类型都是基于mybatis生成对应的,实际上有符号和无符号对应于java中类型可能是不一样的。
- TINYINT:大小(1byte),范围(有符号为-128到127,无符号为0到255),用于小整数值,对应于java中的Byte类型;
- SMALLINT:大小(2byte),范围(有符号为-32768到32767,无符号为0到65535),用于大整数值,对应于java中的Short类型;
- MEDIUMINT:大小(3byte),范围(有符号为-8388608到8388607,无符号为0到65535),用于大整数值,对应于java中的Integer类型
- INT或INTEGER:大小(4byte),范围(有符号为-2147483648到2147483647,无符号为0到4294967295),用于大整数值,也对应于java中的Integer类型
- BIGINT:大小(8字节),范围(有符号为-9223372036854775808到9223372036854775807,无符号为0到18446744073709551615),用于极大整数值,对应于java中的Long类型
- FLOAT:大小(4字节),范围(有符号为-3.402823466E38到-1.175494351E-38),0,(1.175494351E-38到3.402823466351E38,无符号为0~18446744073709551615),用于单精度浮点值,对应于java中的Float类型
- DOUBLE:大小(8字节),范围((-1.7976931348623157E308到-2.2250738585072014E-308),0,(2.2250738585072014E-308到1.7976931348623157E308)),用于双精度浮点值,对应于java中的Double类型;
- DECIMAL:大小(对DECIMAL(M,D),如果M>D,为M2否则为D2),范围(依赖于M和D的值),用于小数值,尤其用于金融相关,对应于java中的Long类型;
日期和时间类型
mybatis生成时都对应到java中的Date类型
- DATE:大小(3byte),范围(1000-01-01到9999-12-31),格式(YYYY-MM-DD),用于日期值;
- TIME:大小(3byte),范围(-838:59:59到838:59:59),格式(HH:MM:SS),用于连续时间;
- TIMESTAMP:大小(4byte),范围(1970-01-0100:00:00/2038,结束时间是第2147483647秒,北京时间2038-1-1911:14:07,格林尼治时间2038年1月19日凌晨03:14:07),格式(YYYY-MM-DDHH:MM:SS),用于混合日期和时间值
- DATETIME:大小(8byte),范围(1000-01-0100:00:00到9999-12-3123:59:59),格式(YYYY-MM-DDHH:MM:SS),也用于混合日期时间值
字符串类型
- CHAR(n):大小(0~255byte,注意定义时指定的n为字符数,而不是字节数),用于定长字符串;
- VARCHAR(n):大小(0~65535byte,n也是指的字符数),用于变长字符串;
- TINYBLOB:大小(0~255byte),用于不超过255个字符的二进制字符串;
- BLOB:大小(0~65535bytes),用于二进制形式的长文本数据;
- MEDIUMBLOB:大小(0~16777215bytes),用于二进制形式的中等长度文本数据;
- LONGBLOB:大小(0~4294967295bytes),用于二进制形式的极大文本数据;
- TINYTEXT:大小(0~255bytes),用于短文本字符串;
- TEXT:大小(0-65535bytes),用于长文本数据
- MEDIUMTEXT:大小(0~16777215bytes),用于中等长度文本字数据;
- LONGTEXT:(0~4294967295bytes),用于极大文本数据(足够足够大了,再长的文本数据也基本上够你用了);
- 对了,还有一个BIT布尔类型,对应于java中的Boolean类型
总之吧,好记性不如烂笔头嘛,做个笔记和总结,让自己以后创建数据表的时候或者添加字段的时候能够正确的选择MySQL的字段数据类型。如果还是记不住,那就来这里翻一下就好了,也不用这里搜那里查了,看自己的这篇笔记基本就够了。