Mysqldatatype(数据类型)
MySQL 数据类型
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)⼤整数值MEDIUMINT3 字节(-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.225 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的值⼩数值
⽇期和时间类型
表⽰时间值的⽇期和时间类型为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 类型,可存储的最⼤长度不同,可根据实际情况选择。字符串长度如何定义
另:
1.
MySQL 5.0 以上的版本:
1、⼀个汉字占多少长度与编码有关:
UTF-8:⼀个汉字=3个字节
GBK:⼀个汉字=2个字节
2、varchar(n) 表⽰ n 个字符,⽆论汉字和英⽂,Mysql 都能存⼊ n 个字符,仅是实际字节长度有所区别
2.
1、整型
MySQL数据类型含义(有符号)
tinyint(m)1个字节范围(-128~127)
smallint(m)2个字节范围(-32768~32767)
mediumint(m)3个字节范围(-8388608~8388607)
int(m)4个字节范围(-2147483648~2147483647)
bigint(m)8个字节范围(+-9.22*10的18次⽅)
取值范围如果加了 unsigned,则最⼤值翻倍,如 tinyint unsigned 的取值范围为(0~255)。
int(m) ⾥的 m 是表⽰ SELECT 查询结果集中的显⽰宽度,并不影响实际的取值范围,没有影响到显⽰的宽度,不知道这个 m 有什么⽤。
2、浮点型(float 和 double)
MySQL数据类型含义
float(m,d)单精度浮点型 8位精度(4字节) m总个数,d⼩数位
double(m,d)双精度浮点型 16位精度(8字节) m总个数,d⼩数位
设⼀个字段定义为 float(5,3),如果插⼊⼀个数 123.45678,实际数据库⾥存的是 123.457,但总个数还以实际为准,即 6 位。
3、定点数
浮点型在数据库中存放的是近似值,⽽定点类型在数据库中存放的是精确值。
decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是⼩数位。
4、字符串(char,varchar,_text)
MySQL数据类型含义
char(n)固定长度,最多255个字符
varchar(n)可变长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次⽅-1个字符
longtext可变长度,最多2的32次⽅-1个字符
char 和 varchar:
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 的索引
似乎不起作⽤。
5.⼆进制数据(_Blob)
1._BLOB和_text存储⽅式不同,_TEXT以⽂本⽅式存储,英⽂存储区分⼤⼩写,⽽_Blob是以⼆进制⽅式存储,不分⼤⼩写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不⽤指定字符集。
6.⽇期时间类型
MySQL数据类型含义
date⽇期 '2008-12-2'
time时间 '12:25:36'
datetime⽇期时间 '2008-12-2 22:06:44'
timestamp⾃动存储记录修改时间
若定义⼀个字段为timestamp,这个字段⾥的时间数据会随其他字段修改的时候⾃动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
数据类型的属性
MySQL关键字含义
NULL数据列可包含NULL值
NOT NULL数据列不允许包含NULL值
DEFAULT默认值
PRIMARY KEY主键
AUTO_INCREMENT⾃动递增,适⽤于整数类型
UNSIGNED⽆符号
CHARACTER SET name指定⼀个字符集
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论