SQL数据类型
在创建表的列时,必须为其指定数据类型,列的数据类型决定了数据的取值、范围和存储格式。MySQL提供了丰富的数据类型。
在讨论数据类型时,使用了精度、小数位数和长度三个概念,前两个概念是针对数值型数据的:
精度:指数值数据中所存储的十进制数据的总位数;
小数位数:指数值数据中小数点右边可以有的数字位数的最大值。例如,数值数据3560.697的精度是7,小数位数是3。
长度:指存储数据所使用的字节数。
整数型
整数型包括bigint(8字节)、int(4字节)、smallint(3字节)、mediumint(2字节)、tinyint(1字节) ,从标志符的含义可以看出,它们表示数的范围逐渐缩小。
精确数值型
整数部分和小数部分构成,其所有的数字都是有效位,能够以完整的精度存储十进制数。精确数值型包括decimal,numeric 两类,从功能上说两者完全等价,两者的唯一区别在于decimal 不能用于带有identity 关键字的列。
声明格式是numeric|decimal(p[,s]) 其中p 为精度,s 为小数位数,s 的默认值为0。例如,指定某列为精确数值型,精度为6,小数位数为3,即decimal(6,3) ,那么若向某记录的该列赋值56.342689时,该列实际存储的是56.3427。
浮点型
浮点型也称近似数值型。这种类型不能提供精确表示数据的精度,使用这种类型来存储某些数值时,有可能会损失一些精度,所以它可用于处理取值范围非常大且对精度要求不是十分高的数值量,如一些统计量。
有两种浮点数据类型:单精度(float)和双精度(double)。两者通常都使用科学记数法表示数据,即形为:尾数E阶数
位型
位字段类型,表示如下:BIT[(M)] 。其中,m表示位值的位数,范围为1~64。如果省略m,默认为1。
字符型
字符型数据用于存储字符串,字符串中可包括字母、数字和其他特殊符号(如#、@、&等)。在输入字符串时,需将串中的符号用单引号或双引号括起来,如’abc’、’Abc<Cde‘。
MySQL字符型包括固定长度(char)和可变长度(varchar)字符数据类型。
CHAR[(N)]:定长字符数据类型。其中N定义字符型数据的长度,N为1~255之间,默认为1。当表中的列定义为CHAR(N)类型时,若实际要存储的字符串长度不足N时,则在串的尾部添加空格以达到长度N。若输入的字符个数超出了N,则超出的部分被截断。VARCHAR[(N)]:变长字符数据类型。其中n可以指定为0~65535之间的值,这里N表示的是字符串可以达到的最大长度。VARCHAR的长度为输入字符串的实际字符个数,而不一定是N。
文本型
当需要存储大量的字符数据,如较长的备注、日志信息等,字符型数据的最长65535个字符的限制可能使它们不能满足应用需求,此时可使用文本型数据。文本型数据对应ASCII字符,其数据的存储长度为实际字符数个字节。
文本型数据可分为4种:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT
BINARY和VARBINARY型
binary和varbinary类型类似于CHAR和VARCHAR,不同的是它们包含的是二进制字符串,而不是非二进制字符串。也就是说,它们包含的是字节字符串,而不是字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值。
BLOB型
MySQL可以通过BLOB数据类型来存储数码照片、视频和扫描的文档这些数据。BLOB是一个二进制大对象,可以容纳可变数量的数据。
日期时间类型
MySQL支持五种时间日期类型:date,time,datetime,timestamp,year 。
date:年月日组成,代表一个实际存在的日期。使用格式为YYYY-MM-DD,年份,月份和日期之间使用连字符-隔开,还可以使用其他字符或者不使用任何连接符,如19970806time:一天中的一个时间,由小时数、分钟数、秒数和微秒数组成。格式为HH:MM:SS.fraction。其中fraction为微秒部分,是一个6位的数字,可以省略。它必须是一个有意义的时间,不合法的时间会变成00:00:00。datetime,timestamp:这些是日期和时间的组合,日期和时间之间用空格隔开。对于datetime,年份在1000~9999之间,而timestamp的年份在1970~2037之间,另一个重要的区别是timestamp支持时区,随着操作系统时区发生改变。year:记录年份值。YYYY形式检索和显示year值。
ENUM和SET类型
它们是比较特殊的字符串数据列类型,它们的取值范围是一个预先定义好的列表。ENUM,SET 数据列的取值只能从这个列表中进行选择。ENUM 和SET 之间的主要区别是:ENUM 只能取单值,它的数据列表是一个枚举集合,最多允许65535个成员;SET 可取多值,合法取值列表最多允许有64个成员,空字符串也是一个合法的SET 值。
Last updated