整型
MySQL数据类型 | 字节数 |
---|---|
tinyint(m) | 1个字节 |
smallint(m) | 2个字节 |
mediumint(m) | 3个字节 |
int(m) | 4个字节 |
bigint(m) | 8个字节 |
Core
- 取值范围如果加了 unsigned,则最大值翻倍,如 tinyint unsigned 的取值范围为(0~255)。
- 整形(m) 中的 m 是表示 SELECT 查询结果集中的显示宽度,只有搭配ZEROFILL才会起作用.ZEROFILL默认会使得该类型转变为无符号类型.当设置了显示宽度和ZEROFILL,且插入数字宽度小于m时,数字左端将会补零直至宽度等于m.
- 如果插入数字超出范围则会插入对应的临界值(最大值或最小值)
示例
CREATE TABLE test( a INT(3) ZEROFILL, b BIGINT UNSIGNED);
浮点型FLOAT,DOUBLE和定点型DECIMAL
FLOAT(M,D)#浮点型DOUBLE(M,D)DEC(M,D)#定点型#M=整数位+小数位#D=小数位
MySQL数据类型 | 长度及含义 |
---|---|
float(m,d) | 单精度浮点型 8位精度(4字节) |
double(m,d) | 双精度浮点型 16位精度(8字节) |
dec(m,d) | 定点型 |
Core
- 浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
- DEC默认M为10,D为0
- 不指定M和D浮点型或根据插入数值的精度来决定精度
- 插入超出范围的数字将会变为临界值
字符串(char,varchar,_text)
MySQL数据类型(n最多字符数) | 含义 |
---|---|
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 个字节。
- 2.text 类型不能有默认值。
3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。
二进制数据(_Blob)
- 1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
- 2._BLOB存储的数据只能整体读出。
- 3._TEXT可以指定字符集,_BLO不用指定字符集。
ENUM,SET
CREATE TABLE test( a ENUM('a','b','c'), b SET('a','b','c'));INSERT INTO test VALUES('a','a,c'),('c','b')
- ENUM只能为1个值而SET可以为多个值
日期时间类型
类型 | 字节 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
- TIMESTAMP可以适应时区的变化