- MySQL数据类型总览
- 整数类型
类型 | 所占空间(bytes) | 值范围-有符号(正负值)//默认有符号 | 值范围-无符号(正数) |
---|---|---|---|
tinyint:微整型 | 1 | -128 ~ 127 | 0 ~ 255 |
smallint:小整型 | 2 | -32768 ~ 32767 | 0 ~ 65535 |
mediumint:中等型 | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
int:整型 | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
bigint:大整型 | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
--设置无符号:即此字段数据只能插入正数值-- --关键字:unsigned--
create table t1(id tinyint unsigned);
- 小数类型
类别 | 类型 | 所占空间(bytes) | 值范围-有符号(正负值)//默认有符号 | 值范围-无符号(正数) |
---|---|---|---|---|
浮点数 | float:单精度小数 | 4 | -3.402823466E+38~ -1.175494351E-38 | 0~1.175494351E-38~ 3.402823466E+38 |
double:双精度小数 | 8 | -1.7976931348623157E+308~ 2.2250738585072014R-308 | 0~2.2250738585072014E-308~ 1.7976931348623157E+308 | |
定点数 | decimal:精确小数 | M+2 | -1.7976931348623157E+308~ 2.2250738585072014E-308 | 0~2.2250738585072014E-308~ 1.7976931348623157E+308 |
浮点小数:“不精确的小数”,包括float和double。
float:占用4字节存储空间,可称为“单精度浮点数”,约7位有效数字。
double:占用8字节存储空间,可称为“双精度浮点数”,约17位有效数字。
定点小数:“精确的小数”。。
decimal(M,D):其中M表示该小数的总有效位数(最大值65),D表示该小数的小数点后的位数。
--案例--
create table t2(a1 float,a2 double,a3 decimal(20,5));
insert into t2 values(
123456789.123456789123456789,
123456789.123456789123456789,
123456789.123456789123456789);
select a1 as 'float',a2 as 'double',a3 as 'decimal' from t2;
- 日期/时间类型
类型 | 所占空间(bytes) | 日期格式 | 值范围 | 零值表示 |
---|---|---|---|---|
year:年份 | 1 | YYYY | 1901 ~ 2155 | 0000 |
date:日期 | 4 | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 0000-00-00 |
time:时间 | 3 | HH:MM:SS | -838:59:59 ~ 838:59:59 | 00:00:00 |
datetime:日期时间 | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 0000-00-00 00:00:00 |
timestamp:时间戳 | 4 | YYYY-MM-DD HH:MM:SS | 19700101080001~ 2038 年的某个时刻 | 00000000000000 |
timestamp类型:表示“时间戳”,其实就是一个整数数字,该数字是从是“时间起点”到现在为止的“秒数”。
时间起点:1970-1-1 0:0:0
小细节:timestamp类型在一个表中只能用于一个字段!
原因:CURRENT_TIMESTAMP在对表数据进行修改时,刷新为当前时间,在一个表中如果多列为CURRENT_TIMESTAMP,那么这些列的数据都是一样的,这样毫无意义,并且耗费资源。
- 字符串
类型 | 值范围 |
---|---|
char:定长字符 | 0~255个字符 |
varchar:变长字符 | 0~65536个字符 |
set:多选 | 0~64个选项值 |
enum:单选/枚举 | 0~65535个选项值 |
blob:二进制长文本数据 | 0~65535字节 |
text:长文本数据 | 0~65535字节 |
varchar特点
1、存储的字符长度是写入的实际长度,但不超过设定的长度。最长可设定为65532(字节)。
- 由于其最长的限制是字节数,因此存储中文和英文的实际字符个数是不同的;
- 英文:一个字符占一个字节;
- 中文(gbk编码):一个字符占2个字节;
- 中文(utf8编码):一个字符占3个字节;
2、如果实际写入的字符不足设定的长度,就按实际的长度存储。
3、相对于char字符串,其存取速度相对更慢。