MySql数据类型介绍(一)
MySql数据类型大致分为3大类:数值,字符串(字符)类型,日期/时间。
数值型
数值型包含整数型和浮点型。
- 整数型
- BIT:数据类型保存位字段值。BIT(M)类型允许存储M位值。M范围为1~64,默认为1。
- TINYINT:小整数型,占1字节。取值范围,有符号范围(-128,127),无符号范围(0,255)。相当于java中的byte类型。
- SMALLINT:大整数型,占2个字节。取值范围,有符号(-32768,32767),无符号(0,65535),相当于java中的char类型。
- MEDIUMINT:大整数型,占3个字节。取值范围,有符号(-8388608,8388607),无符号(0,16777215)。
- INT/INTEGER:大整数型,占4个字节。取值范围,有符号(-2147483648,2147483647),无符号(0,4294967295),相当于java中的int。
- BIGINT:极大整数值,占8个字节。取值范围,有符号(-9 233 372 036 854 775 808,9 223 372 036 854 775 807),无符号(0,18 446 744 073 709 551 615),类似java中的long。
- 浮点型
- FLOAT:单精度浮点数值,占4个字节。类似java中的float。
- DOUBLE:双精度浮点数值,占8个字节。类似java中的double。
- DECIMAL:小数值,对DECIMAL(M,D),如果M>D,为M+2否则为D+2依赖于M和D的值 依赖于M和D的值。[注:]我测试了一下,大概意思是,M表示数值数值的长度,D表示数值小数点的位数,如果小数位不足用0补齐。如果超过小数位数,会四舍五入,如果四舍五入后操作限制范围会报错。
数值型的一般使用及修饰符
- int(6):表示存储到数据库的数值没有6位,会用空格补齐。
- UNSIGNED:修饰符规定字段只保存正值。
- ZEROFILL:修饰符规定0可以用来真补输出的值。这个修饰符可以阻止MySql数据库存储负值。
- FLOAT(7,3):7表示数值长度,3表示小数位数。小数位数不够用0补齐。如果超过小数位数,会四舍五入。
字符型/字符串型
MySQL提供了8个基本的字符串类型,分别:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 各SET等多种字符串类型。
- CHAR:字节大小(0-255),用于定长字符串,当保存数值时,数值比指定的长度大将会截断到指定长度,如果数值比指定的长度小,将其右边填充空格补齐。当检索到char时,会将空格删除,所以,我们在存储时字符串右边不能有空格。
- VARCHAR:字节大小(0-65535),用于表示长度可变的字符串。VARCHAR保存时只需要保存需要的字符数,另外通过指示器(长度0-255之间)记录保存的数据长度。
- 指示器的作用:如果需要存储的数据超出指示器的长度,需要存储的数据会被截断。如果需要存储的数据长度未超出指示器的长度,那么会按实际需要的长度进行存储。这样在数据存储时大大的节约磁盘空间。
- TINYBLOB:字节大小(0-255),表示不超过255个字符的二进制字符串。不常使用。
- TINYTEXT:字节大小(0-255),表示短文本字符串。不常使用。
- BLOB:字节大小(0-65535),二进制形式的长文本数据。
- TEXT:字节大小(0-65535),长文本数据。
- BLOB列被视为二进制字符串。TEXT列被视为字符字符串,类似CHAR和BINARY。
- MEDIUMBLOB:字节大小(0-16777215),二进制形式的中等长度文本数据。
- MEDIUMTEXT:字节大小(0-16777215),中等长度的文本数据。
- LOGNGBLOB:字节大小(0-4294967295),二进制形式的极大文本数据。
- LOGNGTEXT:字节大小(0-4294967295),极大文本数据。
- VARBINARY(M):允许长度0-M个字节的定长字节符串,值的长度+1个字节。
- BINARY(M):允许长度0-M个字节的定长字节符串。
- BINARY和VARBINARY类型类似于CHAR和VARCHAR类型,但是不同的是,它们存储的不是字符字符串,而是二进制串。所以它们没有字符集,并且排序和比较是基于列值字节的数值。
- 当保存BINARY值时,在它们右边填充0x00(零字节)值以达到指定长度。取值时不删除尾部的字节。 对于VARBINARY,插入时不填充字符,选择时不裁剪字节。比较时所有字节很重要。
日期和时间类型
表示时间值的日期和时间类型为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:字节大小(8),取值(1970-01-01 00:00:00~2037 年某时),格式(YYYYMMDD HHMMSS),混合日期和时间值,时间戳。
- 如果DATE类型描述为字符串,应该使用连字号作为分隔符分开,而TIME类型的值应该使用冒号作为分隔符分开。需要注意的是,没有冒号分隔符的TIME类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。
- YEAR类型试图将2个数字的年份转换为4个数字的值。把在00-69范围内的值转换到2000-2069范围内。把70-99范围内的值转换到 1970-1979之内。
- DATEYIME和TIMESTAMP这两种类型通常用于自动存储包含当前日期和时间的时间戳。如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了null值。MySQL会自动使用系统当前的日期和时间来填充它。
复合类型
MySQL 还支持两种复合数据类型 ENUM 和 SET,它们扩展了 SQL 规范。
- ENUM:只允许在集合中取得一个值,和java中的枚举类似。
- ENUM 类型在系统内部可以存储为数字,并且从1开始用数字做索引。一个ENUM类型最多可以包含65536个元素,其中一个元素被MySQL保留,用来存储错误信息,这个错误值用索引0或者一个空字符串表示。
- SET:SET类型可以从预定义的集合中取得任意数量的值。
- 一个SET类型最多可以包含64项元素,在SET元素中值被存储为一个分离的‘位’序列,这些‘位’表示与它相对应得元素。‘位’是创建有序集合的一种简单而有效的方式,并且 他还除去了重复的元素,所以SET类型不可能包含两个相同的元素。
文章参考:
Mysql支持的数据类型(总结)
菜鸟教程之MySql数据类型