mysql字段类型总结,mysql数字类型与日期类型等

发布时间:2019-07-28编辑:脚本学堂
本文介绍了mysql字段类型的存储量、取值范围与备注等信息,有关mysql字段类型的入门参考,需要的朋友可以了解下。

数字类型
列类型
需要的存储量
范围、备注
TINYINT
1 个字节
一个很小的整数
有符号的范围是-128到127,无符号的范围是0到255
SMALLINT
2 个字节
一个比较小的整数
有符号的范围是-32768到32767,无符号的范围是0到65535
MEDIUMINT
3 个字节
一个中等大小的整数
有符号的范围是-8388608到8388607,无符号的范围是0到16777215
INT
4 个字节
一个正常大小整数
有符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295
即最多可存储10个数字,如果存储手机号(11位)则会失败。
INTEGER
4 个字节
INT的一个同义词
BIGINT
8 个字节
一个大整数
有符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615
FLOAT(M,D)
4 个字节
 
一个小(单精密)浮点数字。不能无符号。
允许的值是-3.402823466E+38到-1.175494351E-38,0 和 1.175494351E-38到3.402823466E+38。M是显示宽度而D是小数的位数。没有参数的FLOAT或有<24 的一个 参数表示一个单精密浮点数字。
FLOAT
4 个字节
 
DOUBLE
 
8 个字节
一个正常大小(双精密)浮点数字。不能无符号。
允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、
0和2.2250738585072014E-308到1.7976931348623157E+308。
DOUBLE PRECISION
8 个字节
 
REAL
8 个字节
这些是DOUBLE同义词
DECIMAL(M,D)
M字节(D+2 , 如果M < D)
一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列:“未压缩”意味着数字作为一个字符串被存储,值的每一位使用一个字符
NUMERIC(M,D)
M字节(D+2 , 如果M < D)
这是DECIMAL的一个同义词
日期和时间类型
列类型
需要的存储量
范围、备注
DATE
3 个字节
 1000-01-01~9999-12-31 3字节(MySQL3.23版以前是4字节 ) 0000-00-00
DATETIME
8 个字节
 1000-01-01 00:00:00~9999-12-31 23:59:59 8字节 0000-00-00 00:00:00
TIMESTAMP
4 个字节
 19700101000000~2037年的某个时刻 4字节 00000000000000
TIME
3 个字节
 -838:59:59~838:59:59 3字节 00:00:00
YEAR
1 字节
 YEAR(4):1901~2155 YEAR(2):1970~2069 1字节 0000
字符串类型
列类型
需要的存储量
备注
CHAR(M)
M字节,1 <= M <= 255
 
VARCHAR(M)
L+1 字节, 在此L <= M和1 <= M <= 255
 
TINYBLOB, TINYTEXT
L+1 字节, 在此L< 2 ^ 8
最大长度为255(2^8-1)个字符
BLOB, TEXT
L+2 字节, 在此L< 2 ^ 16
最大长度为65535=64K(2^16-1)个字符
MEDIUMBLOB, MEDIUMTEXT
L+3 字节, 在此L< 2 ^ 24
最大长度为16777215=16M(2^24-1)个字符
LONGBLOB, LONGTEXT
L+4 字节, 在此L< 2 ^ 32
最大长度为4294967295=4G(2^32-1)个字符
ENUM('value1','value2',...)
1 或 2 个字节, 取决于枚举值的数目(最大值65535)
 
SET('value1','value2',...)
1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)
 

四种text对应四种blob
text与blob的区别在于:text不能存储图片。
                      blob是二进制流,text是非二进制
mysql 的二进制数据类型 BINARY, VARBINARY, BLOB 都没有字符集的概念
 
再存取blob数据时,要入库时base64,出库时再base64

1.
blob是二进制大对象,可以容纳可变量数量的数据,其中blob分为4中类型:TINYBLOB,BLOB,mediumblob和LongBlob,他们容纳的长度是不同的.
Text同样也分为四种类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT

2.
blob被视为二进制字符串,Text被视为非二进制字符串;
blob列没有字符集,并且排序和比较基于列值字节的数值值。
TEXT列有一个字符集,并且根据字符集的校对规则对值进行排序和比较。
在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。
使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并给出警告.在大多数方面,可以将BLOB列视为能够足够大的VARBINARY列。同样,可以将TEXT列视为VARCHAR列。

3.
BLOB和TEXT在以下几个方面不同于VARBINARY和VARCHAR.
BLOB和TEXT列不能有默认值.

当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同).
对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的.
LONG和LONG VARCHAR对应MEDIUMTEXT数据类型。这是为了保证兼容性。如果TEXT列类型使用BINARY属性,将为列分配列字符集的二元校对规则.

MySQL连接程序/ODBC将BLOB值定义为LONGVARBINARY,将TEXT值定义为LONGVARCHAR。由于BLOB和TEXT值可能会非常长,使用它们时可能遇到一些约束.

BLOB或TEXT对象的最大大小由其类型确定,但在客户端和服务器之间实际可以传递的最大值由可用内存数量和通信缓存区大小确定。
可以通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同时修改服务器和客户端程序。

例如,可以使用 mysql和mysqldump来更改客户端的max_allowed_packet值.

ZEROFILL属性(零值)适用于所有数值类数据列类型,作用是,如果数值的宽度小于定义的显示宽度,则在数值前填充0。
UNSIGNED属性不允许数据列出现负数。
AUTO_INCREMENT属性可生成独一无二的数字序列。只对整数类的数据列有效。
NULL和NOT NULL属性设置数据列是否可为空。
DEFAULT属性可为数据列指定默认值。