本文介绍了mysql字段类型的相关内容,包括数值类型、日期类型、字符类型等的用法,mysql支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型,需要的朋友参考下。
mysql字段类型
mysql支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。
几种列类型描述使用了下述惯例:
m:表示最大显示宽度。最大有效显示宽度是255。
d:适用于浮点和定点类型,并表示小数点后面的位数。最大可能的值是30,但不应大于m-2。
[ ]:方括号表示可选部分。
1,数值类型
mysql支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,int(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。当结合可选扩展属性zerofill使用时, 默认补充的空格用零代替。例如,对于声明为int(5) zerofill的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当mysql为复杂联接生成临时表时会遇到问题,因为在这些情况下mysql相信数据适合原列宽度。
如果为一个数值列指定zerofill,mysql自动为该列添加unsigned属性。
MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持
myisam、MEMORY、
innodb和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。
当要在一个数值列内保存一个超出该列允许范围的值时,MySQL的操作取决于此时有效的SQL模式。如果模式未设置或设置为非严格模式,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。
但是,如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。
DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度(默认值10)和标度;例如:
salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。
· BIT[(M)]
位字段类型。M表示每个值的位数,范围为从1到64。如果M被省略, 默认为1。
· TINYINT[(M)] [UNSIGNED] [ZEROFILL] (同义词 )
很小的整数。带符号的范围是-128到127。无符号的范围是0到255。
· BOOL,BOOLEAN
是TINYINT(1) 的同义词。zero值被视为假。非zero值视为真。在将来,将根据标准SQL引入完全布尔类型的处理。
· SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。
· MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215。
· INT[(M)] [UNSIGNED] [ZEROFILL] (同义词 INTEGER)
普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
· BIGINT[(M)] [UNSIGNED] [ZEROFILL]
大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。
· FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
小(单精度)
浮点数。允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。M是小数纵位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。
使用浮点数可能会遇到意想不到的问题,因为在MySQL中的所有计算用双精度完成。
· DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL](同义词 DOUBLE PRECISION、REAL)
普通大小(双精度)浮点数。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到 1.7976931348623157E+308。这些是理论限制,基于IEEE标准。实际的范围根据硬件或操作系统的不同可能稍微小些。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位。
如果SQL
服务器模式包括REAL_AS_FLOAT选项,REAL是FLOAT的同义词而不是DOUBLE的同义词。
· FLOAT(p) [UNSIGNED] [ZEROFILL]
浮点数。p表示精度(以位数表示),但MySQL只使用该值来确定是否结果列的数据类型为FLOAT或DOUBLE。如果p为从0到24,数据类型变为没有M或D值的FLOAT。如果p为从25到53,数据类型变为没有M或D值的DOUBLE。结果列范围与本节前面描述的单精度FLOAT或双精度DOUBLE数据类型相同。
FLOAT(p)语法与ODBC兼容。
· DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] (同义词DEC、NUMERIC、FIXED )
压缩的“严格”定点数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。小数点和(负数)的‘-’符号不包括在M中。如果D是0,则值没有小数点或分数部分。DECIMAL整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略, 默认是0。如果M被省略, 默认是10。FIXED同义词适用于与其它服务器的兼容性。
所有DECIMAL列的基本计算(+,-,*,/)用65位精度完成。
2,日期和时间类型
DATE
日期。支持的范围为'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式显示DATE值,但允许使用字符串或数字为DATE列分配值。
· DATETIME
日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。
· TIMESTAMP[(M)]
时间戳。范围是'1970-01-01 00:00:00'到2037年。
TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。
TIMESTAMP值返回后显示为'YYYY-MM-DD HH:MM:SS'格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。
注释:MySQL 4.1以前使用的TIMESTAMP格式在MySQL 5.1中不支持
· TIME
时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式显示TIME值,但允许使用字符串或数字为TIME列分配值。
· YEAR[(2|4)]
两位或四位格式的年。默认是四位格式。在四位格式中,允许的值是1901到2155和0000。在两位格式中,允许的值是70到69,表示从1970年到2069年。MySQL以YYYY格式显示YEAR值,但允许使用字符串或数字为YEAR列分配值。
3,字符串类型
MySQL 5.1字符串数据类型包括部分在MySQL 4.1之前的版本中没有的特性:
许多字符串数据类型的列定义可以包括指定字符集的CHARACTER SET属性,也可能包括校对规则。(CHARSET是CHARACTER SET的一个同义词)。这些属性适用于CHAR、VARCHAR、TEXT类型、ENUM和SET。例如:
CREATE TABLE t
(
c1 CHAR(20) CHARACTER SET utf8,
c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin
);
[NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE]
固定长度字符串,当保存时在右侧填充空格以达到指定的长度。M表示列长度。M的范围是0到255个字符。当检索CHAR值时尾部空格被删除。
CHAR是CHARACTER的简写。NATIONAL CHAR(或其等效短形式NCHAR)是标准的定义CHAR列应使用 默认字符集的SQL方法。
BINARY属性是指定列字符集的二元校对规则的简写。排序和比较基于数值字符值。列类型CHAR BYTE是CHAR BINARY的一个别名。这是为了保证兼容性。可以为CHAR指定ASCII属性。它分配latin1字符集。可以为CHAR指定UNICODE属性。它分配ucs2字符集。
MySQL允许创建类型CHAR(0)的列。这主要用于必须有一个列但实际上不使用值的旧版本的应用程序相兼容。
· CHAR
这是CHAR(1)的同义词。
· [NATIONAL] VARCHAR(M) [BINARY]
变长字符串。M表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)。
注释:MySQL 5.1遵从标准SQL规范,并且不删除VARCHAR值的尾部空格。
BINARY属性是指定列的字符集的二元 校对规则的简写。排序和比较基于数值字符值。
VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。
· BINARY(M)
BINARY类型类似于CHAR类型,但保存二进制字节字符串而不是非二进制字符串。
· VARBINARY(M)
VARBINARY类型类似于VARCHAR类型,但保存二进制字节字符串而不是非二进制字符串。
· TINYBLOB
最大长度为255(28–1)字节的BLOB列。
· TINYTEXT
最大长度为255(28–1)字符的TEXT列。
· BLOB[(M)]
最大长度为65,535(216–1)字节的BLOB列。
可以给出该类型的可选长度M。如果给出,则MySQL将列创建为最小的但足以容纳M字节长的值的BLOB类型。
· TEXT[(M)]
最大长度为65,535(216–1)字符的TEXT列。
可以给出可选长度M。则MySQL将列创建为最小的但足以容纳M字符长的值的TEXT类型。
· MEDIUMBLOB
最大长度为16,777,215(224–1)字节的BLOB列。
· MEDIUMTEXT
最大长度为16,777,215(224–1)字符的TEXT列。
· LONGBLOB
最大长度为4,294,967,295或4GB(232–1)字节的BLOB列。LONGBLOB列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。
· LONGTEXT
最大长度为4,294,967,295或4GB(232–1)字符的TEXT列。LONGTEXT列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。
· ENUM('value1','value2',...)
枚举类型。只能有一个值的字符串,从值列'value1','value2',...,NULL中或特殊 ''错误值中选出。ENUM列最多可以有65,535个截然不同的值。ENUM值在内部用整数表示。
如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。
空字符串错误值的索引值是0。这说明你可以使用下面的SELECT语句来找出分配了非法ENUM值的行:
· mysql> SELECT * FROM tbl_name WHERE enum_col=0;
· SET('value1','value2',...)
一个集合。集合对象可以有零个或多个值,每个值必须来自列值'value1','value2',...SET列最多可以有64个成员。SET值在内部用整数表示。列值时各成员之间用逗号(‘,’)间隔开。这样SET成员值本身不能包含逗号。
例如,指定为SET('one', 'two') NOT NULL的列可以有下面的任何值:
''
'one'
'two'
'one,two'
使用来自其他
数据库引擎的列类型
为了使用由其它卖方编写的SQL执行代码,MySQL按照下表所示对列类型进行映射。通过这些映射,可以很容易地从其它数据库引擎将表定义导入到MySQL中:
在创建表时对列类型进行映射,然后原来的类型定义被丢弃。如果你使用其它卖方的类型创建一个表,然后执行DESCRIBE tbl_name语句,MySQL使用等效的MySQL类型来报告表的结构。例如: