本文给出mysql中常用的数据类型说明。
数值
类型 |
说明 |
表示范围 |
占用字节 |
备注 |
---|---|---|---|---|
tinyint(n) |
非常小的整数,n最大取值4(n表示显示宽度) |
-128到127 |
1字节 |
1字节=8bit,存储范围0-255(2的8次方) |
int(n) |
整数,n最大取值11(显示宽度) |
-2147483648到2147483647(有符号) 0到4294967295(无符号型) |
4字节 |
4字节=(2^8)*4 = 2^32 使用时用int(10)即可(因为无符号最多也只能表示10位的) |
bigint(n) |
非常大的整数,n最大取值20(显示宽度) |
|||
decimal(P,D) |
小数,P是位数,D是小数点后的位数。 |
P范围为1〜65,D的范围是0~30 |
- 显示宽度:在字段上使用ZEROFILL属性时,该字段的值会左边补0,如124为0000000123;不会限制字段可以存储的值的范围,如int类型无论在括号中写的是多少,它都可以存储从-2147483648到2147483647的值。
- unsigned,最大值翻倍
字符串
类型 |
说明 |
表示范围 |
备注 |
---|---|---|---|
char(n) |
定长字符串,n最大取值255(n表示字符数) 检索速度比varchar快 |
255个字符(中文、英文、数字都算一个字符) (例:utf8编码方式, 那么char类型占255 * 3个字节) |
适合用在身份证号码、手机号码等 |
varchar(n) |
变长字符串,n最大取值跟字符集有关(n表示字符数) 必须定义长度 |
1、存放的字符数量跟字符集有关系:
2、最大空间65535个字节 |
varchar实际范围是65532或65533, 因为内容头部会占用1或2个字节保存该字符串的长度;如果字段default null(即默认值为空),整条记录还需要1个字节保存默认值null。
阿里开发规范:5000以上用text,且单独一张表,用主键来对应。 |
text |
长文本数据 text列不能有默认值 |
最大长度为2^31-1个字符 |
|
BLOB |
可以存二进制数据,适合图片等 |
时间
timestamp(当时间戳使用) |
datetime | |
---|---|---|
自动更新 |
可以自动更新。insert、update数据时,可以设置timestamp列自动以当前时间(CURRENT_TIMESTAMP)填充/更新 |
存什么是什么。需要SQL语句手动更新 |
时区 |
存的是UTC时间;查询时,会跟随实际时区变化而变化 |
存什么是什么 |
表示范围 |
1970-01-01 00:00:00 ~ 2038-01-09 03:14:07 |
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
索引速度 |
快 |
慢 |
存储空间 |
4字节 |
8字节 |
varchar
存储变长字符串
1、varchar(n)的n代表什么n表示的是字符数
例如:test varchar(20)
2、varchar长度设置
在长度够用的情况下,越短越好。
3、varchar的最大长度
varchar的最大长度是65535 字节。
【强制】varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。
4、varchar存放汉字的个数
varchar(n)是几,就能存几个中文字。因为中文英文数字都算一个字符。
例如:varchar(50)是能保存50个汉字。
附:
1 byte (字节) = 8 bit (位), 存储范围0-255(2的8次方)
字符集:GBK :一个汉字占 2 个字节
UTF8:一个汉字占 3 个字节
标签:字符,00,01,varchar,字节,数据类型,长度 From: https://www.cnblogs.com/zhegemaw/p/18362899