mysql字段类型

学习自 https://www.cnblogs.com/jennyyin/p/7895010.html,感谢原博主的奉献

mysql支持多种类型,大致可以分为三类:数值、字符串、日期/时间。

数值类型
类型 大小 范围(有符号) 范围(无符号) 用途
tinyint 1字节 (-128, 127) (0,255) 小整数值
smallint 2字节 (-32768,32768) (0,65535) 大整数值
mediumin 3字节 (-8388608,8388607) (0,16777215) 大整数值
int或integer 4字节 (-2147483648,2147483647) (0,4294967295) 大整数值
bigint 8字节 (-9233372036854775808,9223372036854775807) (0,18446744073709551615) 极大整数值
float 4字节 (-3.402823466E+38,-1.175494351E-38),0,(1.175494351E-38,3.402823466351E+38) 0,(1.175494351E-38,3.402823466E+38) 单精度浮点数值
double 8字节 (-1.7976931348623157E+308,-2.2250738585072014E-308),0,(2.2250738585072014E-308,1.7976931348623157E+308) 0,(2.2250738585072014E-308,1.7976931348623157E+308) 双精度浮点数值

注:使用int时,字段数值范围只与多少字节、有无符号有关。如tingint 数值范围(有符号-128~127、无符号0~255),与int(m)中的m无关。

m表示最大显示宽度,最大有效显示宽度是255.显示宽度与存储大小或类型包含的值的范围无关。

例如m=5我们可以简单的理解成为, 我们建立这个长度是为了告诉MYSQL数据库我们这个字段的存储的数据的宽度为5位数,  当然如果你不是5位数(只要在该类型的存储范围之内)MYSQL也能正常存储。


字符串
字符串类型指char、varchar、binary、varbinary、blob、text、enum和set。
char和varchar:
1.char(n)若存入字符数小于n,则以空格补于其后,查询时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n)固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar快。

简单的总结来说,mysql中获取字符串长度的有两个函数:
length:返回字符串所占的字符数,是计算字段的长度一个汉字是算三个字符,一个数字或字母算一个字符
char_length:返回字符串所占的字符数,不管汉字还是数字或者是字母都算是一个字符

varchar和text:
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节
2.text类型不能有默认值
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

enum和set:
1.enum单选字符串类型,设定时需要给定几个选项,存储时只存储其中一个值。设定enum格式:enum('选项1','选项2','选项3',...)。实际上enum的选项都会对应一个数字,依次是1,2,3...,最多有65535个选项。
2.set多选字符串类型,设定时需要给定几个选项,存储时可以存储若干个值。设定set格式:set('选项1','选项2','选项3',...)。set的每个选项也对应一个数字,依次是1,2,4,8,16...,最多有64个选项,使用时可以是选项字符串本身(多个选项用逗号分隔),也可以使用多个选项数字之和(比如:1+2+4=7)


类型
char 0-255字节 定长字符串
varchar 0-65535字节 变长字符串
tinyblob 0-255字节 不超过255个字符的二进制字符串
tinytext 0-255字节 短文本字符串
blob 0-65535字节 二进制形式的长文本数据
text 0-65535字节 长文本数据
mediumblob 0-16777215字节 二进制形式的中等长度文本数据
mediumtext 0-16777215字节 中等长度文本数据
longblob 0-4294967295字节 二进制形式的极大文本数据
longtext 0-4294967295字节 极大文本数据


日期时间类型
表示时间值的日期和时间类型为datetime、date、timestamp、time和year。

date 3字节 1000-01-01/9999-12-31 yyyy-mm-dd 日期值
time 3字节 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
year 1字节 1901/2155 YYYY 年份值
datetime 8字节 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
timestamp 4字节 1970-01-01 00:00:00/2038 结束时间2038年 YYYYMMDD HHMMSS 混合日期和时间值,时间戳


二进制
布尔:bit
bit表示1个二进制位
bit(8)表示8个二进制位
性别可以定义为0,1,而不使用male或female字符串
数据逻辑删除
车在车库的停放状态
所有基于两种状态的数据都可以用0,1来存储

原文地址:https://www.cnblogs.com/caohongchang/p/11127150.html