数据类型是定义列中能够存储什么数据以及该数据实际怎么存储的基本规则。Mysql的经常使用数据类型主要有:mysql
数据类型sql |
说明数据库 |
CHAR性能 |
1~255个字符的定长串,它的长度必须在建立时指定,不然MySQL假定为CHAR(1)编码 |
VARCHAR索引 |
可变长度,最多不超过255字节,如在建立时指定VARCHAR(n),则可存储0~n个字符的变长串ci |
TINYTEXT字符串 |
同TEXT,最大长度为255字节table |
MEDUIMTEXT数据类型 |
同TEXT,最大长度为16K |
TEXT |
最大长度为64K的变长文本 |
LONGTEXT |
同Text,最大长度为4GB(纯文本,通常不会到4G) |
ENUM |
接受最多64K个串组成的预约义集合的某个串 |
SET |
接受最多64K个串组成的预约义集合的零个或多个串 |
注意:无论任何形式的串数据类型,串值都必须在引号内(一般单引号更好);若是数值是计算中使用的数值,则应存储在数值数据类型列中,若是做为字符串使用(如电话号码、邮政编码)则应保存在串数据类型列中。
类型说明 |
存储需求 |
取值范围 |
tinyint[(m)] |
1字节 |
有符号值:-128 到127(- 2^7 到2^7 – 1) 无符号值:0到255(0 到2^8 – 1) |
smallint[(m)] |
2字节 |
有符号值:-32768 到32767(- 2^15 到2^15 – 1) 无符号值:0到65535(0 到21 6 – 1) |
mediumint[(m)] |
3字节 |
有符号值:-8388608 到8388607(- 2^23 到2^23 – 1 ) 无符号值:0到16777215(0 到2^24 – 1) |
int[(m)] |
4字节 |
有符号值:-2147683648 到2147683647(- 2^31 到2^31- 1) 无符号值:0到4294967295(0 到2^32 – 1) |
bigint[(m)] |
8字节 |
有符号值:-9223372036854775808 到9223373036854775807(- 2^63到2^63-1) 无符号值:0到18446744073709551615(0到2^64 – 1) |
float[(m, d)] |
4字节 |
最小非零值:±1.175494351e – 38 |
double[(m, d)] |
8字节 |
最小非零值:±2.2250738585072014e – 308 |
decimal (m, d) |
m字节(mysql < 3.23),m+2字节(mysql > 3.23 ) |
可变;其值的范围依赖于m 和d |
mysql提供了5种整型: tinyint、smallint、mediumint、int和bigint(字节数一、二、三、四、8),这些类型在可表示的取值范围上是不一样的。整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。
mysql 提供三种浮点类型: float、double和decimal。与整型不一样,浮点类型不能是unsigned的,其取值范围也与整型不一样,这种不一样不只在于这些类型有最大值,并且还有最小非零值。最小值提供了相应类型精度的一种度量,这对于记录科学数据来讲是很是重要的(固然,也有负的最大和最小值)。
在选择了某种数值类型时,应该考虑所要表示的值的范围,只需选择能覆盖要取值的范围的最小类型便可。选择较大类型会对空间形成浪费,使表没必要要地增大,处理起来没有选择较小类型那样有效。对于整型值,若是数据取值范围较小,如人员年龄或兄弟姐妹数,则tinyint最合适。mediumint可以表示数百万的值而且可用于更多类型的值,但存储代价较大。bigint在所有整型中取值范围最大,并且须要的存储空间是表示范围次大的整型int类型的两倍,所以只在确实须要时才用。对于浮点值,double占用float的两倍空间。除非特别须要高精度或范围极大的值,通常应使用只用一半存储代价的float型来表示数据。
在定义整型列时,能够指定可选的显示尺寸m。若是这样,m应该是一个1 到255的整数。它表示用来显示列中值的字符数。例如,mediumint(4)指定了一个具备4个字符显示宽度的mediumint列。若是定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的"最长"值的长度。若是某个特定值的可打印表示须要不止m个字符,则显示彻底的值;不会将值截断以适合m个字符。须要注意的是,使用一个宽度指示器不会影响字段的大小和它能够存储的值的范围。
对每种浮点类型,可指定一个最大的显示尺寸m 和小数位数d。m 的值应该取1 到255。d的值可为0 到3 0,可是不该大于m – 2(若是熟悉odbc 术语,就会知道m 和d 对应于odbc 概念的"精度"和"小数点位数")。m和d对float和double 都是可选的,但对于decimal是必须的。在选项m 和d时,若是省略了它们,则使用缺省值。
数据类型 |
存储字节数 |
取值范围 |
DATE |
4 |
1000-01-01——9999-12-31 |
TIME |
3 |
-838:59:59——838:59:59 |
DATETIME |
8 |
1000-01-01 00:00:00——9999-12-31 23:59:59 |
TIMESTAMP |
4 |
19700101080001——20380119111407 |
YEAR |
1 |
1901——2155 |
当插入值超出有效取值范围时,系统会报错,并将零值插入到数据库中。
MySQL是以YYYY-MM-DD格式来显示DATE类型的值,插入数据时,数据能够保持这种格式。另外,MySQL还支持一些不严格的语法格式,分隔符"-"能够用"@"、"."等符号来替代。 在插入数据时,也可使用"YY-MM-DD"格式,YY转化成对应的年份的规则与YEAR类型相似。若是咱们想插入当前系统的时间,则能够插入CURRENT_DATE或者NOW()。
TIME类型表示为"时:分:秒",尽管小时范围通常是0~23,可是为了表示某些特殊时间间隔,MySQL将TIME的小时范围扩发了,并且支持负值。对TIME类型赋值,标准格式是'HH:MM:SS',但不必定非要是这种格式。 若是插入的是'D HH:MM:SS'格式,则相似插入了'(D*24+HH):MM:SS'。好比插入'2 23:50:50',至关于插入了'71:50:50'。若是插入的是'HH:MM'或'SS'格式,则效果是其余未被表示位的值赋为零值。好比插入'30',至关于插入了'00:00:30';若是插入'11:25',至关于插入了'11:25:00'。在MySQl中,对于'HHMMSS'格式,系统可以自动转化为标准格式。若是咱们想插入当前系统的时间,则能够插入CURRENT_TIME或者NOW()。
DATETIME类型准格式为"YYYY-MM-DD HH:MM:SS",具体赋值方法与上面的方法类似。
TIMESTAMP的取值范围比较小,没有DATETIME的取值范围大,所以输入值时必定要保证在TIMESTAMP的范围以内。它的插入也与插入其余日期和时间数据类型相似。那么TIMESTAMP类型如何插入当前时间?第一,可使用CURRENT_TIMESTAMP;第二,输入NULL,系统自动输入当前的TIMESTAMP;第三,无任何输入,系统自动输入当前的TIMESTAMP。 另外有很特殊的一点:TIMESTAMP的数值是与时区相关。
给YEAR类型复制能够有三种方法: 第一种是直接插入4位字符串或者4位数字; 第二种是插入2位字符串,这种状况下若是插入'00'~'69',则至关于插入2000~2069;若是插入'70'~'99',则至关于插入1970~1999。第二种状况下插入的若是是'0',则与插入'00'效果相同,都是表示2000年; 第三种是插入2位数字,它与第二种(插入两位字符串)不一样之处仅在于:若是插入的是一位数字0,则表示的是0000,而不是2000年。因此在给YEAR类型赋值时,必定要分清0和'0',虽然二者相差个引号,但实际效果确实相差了2000年。
数据类型 |
说明 |
TITYBLOB |
最大长度为255字节 |
BLOB |
最大长度为64KB |
MEDIUMBLOB |
最大长度为16MB |
LONGBLOB |
最大长度为4GB |