一、数据类型
1、数值型
⑴ 整型
整数类型 | 字节 | 范围 |
tinyint | 1 | 有符号:-128~127 无符号:0~255 |
smallint | 2 | 有符号:-32768~32767 无符号:0~65535 |
mediumint | 3 | 有符号:-8388608~8388607 无符号:0~1677215 (反正很大,不用记住) |
int/integer | 4 | 有符号:-2147483648~2147483647 无符号:0~4294967295 (反正很大,不用记住) |
bigint | 8 | 有符号:-9223372036854775808~9223372036854775807 无符号:0~9223372036854775807*2+1 (反正很大,不用记住) |
特点:
① 都可以设置无符号和有符号,默认有符号,通过unsigned设置无符号
② 如果超出了范围,会报out or range异常,插入临界值
③ 长度可以不指定,默认会有一个长度
长度代表显示的最大宽度,如果不够则左边用0填充,但需要搭配zerofill,并且默认变为无符号整型
例:
DROP TABLE IF EXISTS tab_int; CREATE TABLE tab_int( t1 INT(7) ZEROFILL, t2 INT(7) ZEROFILL UNSIGNED ); --()里面的7不是设置t1的范围,而是显示结果中该列的宽度 -- 加了ZEROFILL用0从左填充空格,默认将会变成无符号整形,后面的UNSIGNED将无意义
⑵ 小数
浮点数类型 | 字节 | 范围 |
float | 4 | ±1.75494351E-38~±3.402823466E+38 (反正很大,不用记住) |
double | 8 | ±2.2250738585072014E-308~±1.7976931348623157E+308 (反正很大,不用记住) |
定点数类型 | 字节 | 范围 |
DEC(M,D) DECIMAL(M,D4) | M+2 | 最大取值范围与double相同,给定decimal的有效取值范围由M和D决定 |
特点:
① M代表整数部位+小数部位的个数,D代表小数部位
② 如果超出范围,则报out or range异常,并且插入临界值
③ M和D都可以省略,但对于定点数,M默认为10,D默认为0
④ 如果精度要求较高,则优先考虑使用定点数
原则: 所选择的类型越简单越好,能保存数值的类型越小越好
⑶ 字符型
字符串类型 | 作用 | |
较短的文本 | char | 代表固定长度的字符 |
varchar | 代表可变长度的字符 | |
其他 | binary和varbinary | 用于保存较短的二进制 |
enum | 用于保存枚举 | |
set | 用于保存集合 | |
较长的文本 | text | |
blob | 保存较大的二进制 |
char与varchar的对比:
char:固定长度的字符,写法为char(M),最大长度不能超过M,其中M可以省略,比较耗费空间,效率高,默认为1
varchar:可变长度的字符,写法为varchar(M),最大长度不能超过M,其中M不可以省略,比较节省空间,效率低
⑷ 日期型
日期和时间类型 | 说明 | 字节 | 最小的值 | 最大的值 |
date | 日期 | 4 | 1000-01-01 | 9999-12-31 |
year | 年 | 1 | 1901 | 838:59:59 |
time+ | 时间 | 3 | -838:59:59 | 2155 |
datetime | 日期+时间 | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
timestamp | 日期+时间 | 4 | 19700101080001 | 2038年的某一时刻 |
datetime与timestamp的比较:
datetime只能反映出插入时的当地时区
timestamp比较容易受时区、语法模式、版本的影响,更能反映当前时区的真实时间