mysql数据类型
整数类型
整数类型 | 字节数 | 有符号的范围 | 无符号的范围 |
tinyint | 1 | -128~127 | 0~255 |
smalllint | 2 | -32768~32767 | 0~65535 |
mediumint | 3 | -8388608~8388607 | 0~16777215 |
int | 4 | -2147483648~2147483647 | 0~4294967295 |
bigint | 8 | -9223372036854775808~9223372036854775808 | 0~18446744073709551615 |
mysql支持数据类型的后面指定该类型的显示宽度。其基本形式如下:
格式: 数据类型(显示宽度)
默认显示宽度:可以理解为,一个数据类型的默认显示宽度正好是能显示该数据类型的所有值的宽度。
长度
tinyint 4
smallint 6
mediumint 9
int 11 无符号则10
bigint 20
tinyint(1)
在整数类型使用时,可以搭配zerofill参数,zerofill参数表示数字不足的显示空间由0来填充。
注意:使用zerofill时,mysql会自动加上unsigned属性。那么,该整数类型只能表示无符号数,其显示宽度比默认显示宽度小1。
在设置了显示宽度时,如果插入的数据宽度大小设置的显示宽度时,数据依然可以插入,且能够显示。该设置的宽度失效。
注意:数据的宽度不能大于默认宽度。如果大于默认宽度,那该数据已经超过了该类型的最大值。因为最大值的宽度必须是小于等于默认宽度。如果一个值大于最大值,将不可能插入。
整数类型还有一个auto_increment属性。自增。
2.浮点数和定点数
==============
mysql中使用浮点数和定点数来表示小数。
浮点数:单精度浮点数(float)和双精度浮点数(double)。
定义数:decimal
浮点类型 字节数 负数的取值范围 非负数的取值范围
float 4 -3.402823466e+38~-1.175494351e-38 0和-1.175494351e-38~3.402823466e+38
double 8 -1.79769313486223157e+308~-2.2250738585072014e-308 0和-2.2250738585072014e-308~1.79769313486223157e+308
decimal m+2 同double 同double
定点数的存储空间是根据其精度来决定的。
mysql中可以指定浮点数的精度:
格式: 数据类型(m,d) decimal(10,2)
m-精度,是数据的总长度,小数点占一个位置
d-标度,小数点后的长度
如果插入的值的精度高于实际定义的精度,系统会自动进行四舍五入处理。float double不会报错,decimal会报一个警告
在存储小数时,建议使用decimal类型,定点数以字符串形式储存。因此,精度要比浮点数要高。而且,浮点数会出现误差,这是浮点数一直存在的缺陷。如果对数据的精度要求比较高,还是选择定点数(decimal)比较安全。
decimal(m,d) 常用于 money 类字段
3.日期与时间类型
==============
数据类型 字节数 取值范围 零值
year 1 1901~2155 0000
date 4 1000-01-01~9999-12-31 0000:00:00
time 3 -838:59:59~838:59:59 00:00:00
datetime 8 1000-01-01 00:00:00~9999-12-31 23:59:59 0000-00-00 00:00:00
timestamp 4 19700101080001~20380119111417 00000000000000
year:
超出范围就会插入0000
使用2位字符串表示,’00’~’69’转换为2000~2069,’70’~’99’转换为1970~1999
使用2位数字表示,00~69转换为2000~2069,70~99转换为1970~1999。
注意两位的数字和两位的字符串是不一样的:0-0000 ‘0”00’-2000
date:
4个字节来表示日期。以yyyy-mm-dd的形式来显示date类型的值。
1)’yyyy-mm-dd’或’yyyymmdd’格式的字符串表示。
2)mysql中还支持一些不严格的语法格式:’yyyymmdd’ ‘yyyy@mm@dd’ ‘yyyy.mm.dd’
3)’yy-mm-dd’或’yymmdd’格式的字符串表示。
4)yy取值同year类型中的两位字符串的表示一致。
5)yyyymmdd或yymmdd格式的数字表示。yy取值同上。
虽然mysql支持date类型的一些不严格的语法格式。但是,实际运用中,最好还是选择标准形式。日期中使用-做分隔符,时间用:做分隔符。如果有特殊需要也可以使用@、* 等特殊字符做分隔符。
使用current_date和now()转换为当前系统日期。
4.字符串类型
==========
字符串类型是mysql中用来存储字符串的数据类型。字符串类型包括char varchar blob text enum set。
char 和 varchar 类型
=================
字符串类型(m) m-该字符串的最大长度为m
char 定长字符类型 0~255
varchar 变长字符类型 5.0版本以前0~255 5.0版本以后0~65535
char(5) 和 varchar(5)的区别
插入值 char占用长度 varchar占用长度
” 5 1
‘1’ 5 2
‘123’ 5 4
‘1234’ 5 5
‘12345’ 5 6
如果插入值的长度大于m,则插入失败。
5.text类型
========
类型 范围 占用空间
tinytext 0~255 长度+2个字节
text 0~65535 长度+2个字节
mediumtext 0~167772150 长度+3个字节
longtext 0~4294967295 长度+4个字节
6.enum类型
========
又称枚举类型。
enum(‘值1’,’值2’,…,’值n’)
n-代表参数列表中的第n个值,这些值末尾的空格会被系统直接删除。
enum类型的值只能取列表中的一个元素。
取值列表中最多能有65535成员。
列表中的每一个值都有一个顺序排列的编号,mysql存入的是这个编号,而不是值。
7.set类型
=======
在创建表时,set类型的取值范围就以列表的形式指定了。
set(‘值1’,’值2’,…,’值n’)
set类型的值最多只以是有64个元素构成的组合。取值可以是其中的一个或多个。其它特性,与enum类似。
8.二进制类型
==========
二进制类型是在数据库中存储二进制数据的数据类型。
类型 取值范围
binary(m) 字节数为m,允许长度为0~m的定长二进制字符串
varbinary(m) 允许长度为0~m的变长二进制字符串,字节数为值的长度加1
bit(m) m位二进制数,m最大值为64
tinyblob 可变长二进制数据,最多255个字节
blob 可变长二进制数据,最多2e16-1个字节
mediumblob 可变长二进制数据,最多2e24-1个字节
longblob 可变长二进制数据,最多2e32-1个字节