MySQL数据类型以及它们在内存能够存储多少字节数据总结MySQL⽀持多种类型,⼤致可以分为三类:数值、⽇期/时间和字符串(字符)类型。
数值类型
MySQL⽀持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且⽀持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也⽀持整数类型TINYINT、MEDIUMINT和BIGINT。下⾯的表显⽰了需要的每个整数类型的存储和范围。
类型⼤⼩范围(有符号)范围(⽆符号)⽤途
TINYINT  1 字节(-128,127)(0,255)⼩整数值
SMALLINT  2 字节(-32 768,32 767)(0,65 535)⼤整数值
MEDIUMINT  3 字节(-8 388 608,8 388 607)(0,16 777 215)⼤整数值
INT或INTEGER 4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
BIGINT8 字节(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)
FLOAT  4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494
351 E-38,3.402 823 466 351 E+38)
0,(1.175 494 351 E-
38,3.402 823 466 E+38)
DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201
4 E-308),0,(2.22
5 073 858 507 201 4 E-308,1.797 693
134 862 315 7 E+308)
0,(2.225 073 858 507 201 4
E-308,1.797 693 134 862
315 7 E+308)
DECIMAL 对DECIMAL(M,D)
,如果M>D,为M+2
否则为D+2
依赖于M和D的值依赖于M和D的值
取值范围如果加了 unsigned,则最⼤值翻倍,如 tinyint unsigned 的取值范围为(0~255)。
int(m) ⾥的 m 是表⽰ SELECT 查询结果集中的显⽰宽度,并不影响实际的取值范围,没有影响到显⽰的宽度,不知道这个 m 有什么⽤。设⼀个字段定义为 float(5,3),如果插⼊⼀个数 123.45678,实际数据库⾥存的是 123.457,但总个数还以实际为准,即 6 位。
浮点型在数据库中存放的是近似值,⽽定点类型在数据库中存放的是精确值。
decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是⼩数位。
⽇期和时间类型
表⽰时间值的⽇期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有⼀个有效值范围和⼀个"零"值,当指定不合法的MySQL不能表⽰的值时使⽤"零"值。
TIMESTAMP类型有专有的⾃动更新特性,将在后⾯描述。
类型⼤
(字
节)
范围格式⽤途
DATE31000-01-01/9999-12-31YYYY-MM-DD⽇期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS 时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD
HH:MM:SS
混合⽇期和时间
TIMESTAMP41970-01-01 00:00:00/2038
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼
治时间 2038年1⽉19⽇ 凌晨 03:14:07
YYYYMMDD
HHMMSS
混合⽇期和时间
值,时间戳
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何⼯作以及如何在查询中使⽤这些类型。
类型⼤⼩⽤途
CHAR0-255字节定长字符串
VARCHAR0-65535 字节变长字符串
TINYBLOB0-255字节不超过 255 个字符的⼆进制字符串
TINYTEXT0-255字节短⽂本字符串
BLOB0-65 535字节⼆进制形式的长⽂本数据
TEXT0-65 535字节长⽂本数据
MEDIUMBLOB0-16 777 215字节⼆进制形式的中等长度⽂本数据
MEDIUMTEXT0-16 777 215字节中等长度⽂本数据
LONGBLOB0-4 294 967 295字节⼆进制形式的极⼤⽂本数据
LONGTEXT0-4 294 967 295字节极⼤⽂本数据
CHAR 和 VARCHAR 类型类似,但它们保存和检索的⽅式不同。它们的最⼤长度和是否尾部空格被保留等⽅⾯也不同。在存储或检索过程中不进⾏⼤⼩写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含⼆进制字符串⽽不要⾮⼆进制字符串。也就是说,它们包含字节字符串⽽不是字符字符串。这说明它们没有字符集,并且排序和⽐较基于列值字节的数值值。
BLOB 是⼀个⼆进制⼤对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最⼤长度不同,可根据实际情况选择。
MySQL 5.0 以上的版本:
1、⼀个汉字占多少长度与编码有关:
UTF-8:⼀个汉字=3个字节
GBK:⼀个汉字=2个字节
2、varchar(n) 表⽰ n 个字符,⽆论汉字和英⽂,Mysql 都能存⼊ n 个字符,仅是实际字节长度有所区别
3、MySQL 检查长度,可⽤ SQL 语⾔来查看:
select LENGTH(fieldname) from tablename
char 和 varchar:
varchar2最大长度1.char(n) 若存⼊字符数⼩于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空
格,varchar 不限于此。
2.char(n) 固定长度,char(4) 不管是存⼊⼏个字符,都将占⽤ 4 个字节,varchar 是存⼊的实际字符数 +1 个字节(n<=255)或2
个字节(n>255),所以 varchar(4),存⼊ 3 个字符将占⽤ 4 个字节。
3.char 类型的字符串检索速度要⽐ varchar 类型的快。
varchar 和 text:
1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存⼊的实际字符数 +1 个字节(n<=255)或 2
个字节(n>255),text 是
实际字符数 +2 个字节。
< 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引
似乎不起作⽤。
⼆进制数据(_Blob)
1._BLOB和_text存储⽅式不同,_TEXT以⽂本⽅式存储,英⽂存储区分⼤⼩写,⽽_Blob是以⼆进制⽅式存储,不分⼤⼩写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不⽤指定字符集。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。