目录
1.数值类型(分为整型和浮点型)
2.字符串类型
3.日期类型
MySQL和Java编程一样,创建表时要考虑数据类型。
MySQL表组成:列名/列数据类型;数据。
1.数值类型(分为整型和浮点型)
数据类型 | 大小 | 说明 | 对应java类型 | 对应C类型 |
bit[(M)] | M指定位数,默认为1 | 二进制数,M范围从1~64,存储数据范围从0~2^M-1 | 常用boolean对应bit,此时默认是1位,即只能存在0和1 | char[] |
tinyint | 1字节 | 0~2^8-1 | Byte | signed char |
smallint | 2字节 | 0~2^16-1 | Short | short int |
int | 4字节 | 0~2^31-1 | Integer | int |
bigint | 8字节 | 0~2^63-1 | Long | long long int |
float(M,D) | 4字节 | 单精度,M指定总长度(包含D),D指定小数位数。会发生精度丢失。(故在MySQL中不建议使用) | Float | float |
double(M,D) | 8字节 | 双精度,M指定总长度(包含D),D指定小数位数。会发生精度丢失。(故在MySQL中不建议使用) | Double | double |
decimal(M,D) | M/D最大值+2 | 双精度,M指定总长度(包含D),D表示小数点位数。精确数值。 | BigDecimal | char[] |
numeric(M,D) | M/D最大值+2 | 和decimal一样 | BigDecimal | char[] |
注:
- 数值类型可以指定为无符号(unsigned),表示不取负数。
- 1字节(byte) = 8位(bit)。
- 对于整型类型的范围:
- 有符号范围:-2^(类型字节数*8-1) ~ 2^(类型字节数*8-1) - 1。
- 无符号范围:0 ~ 2^(类型字节数) - 1。
- 尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,不如在设计时,根据业务场景将int类型提升为bigint类型。
2.字符串类型
数据类型 | 大小 | 说明 | 对应java类型 | 对应C类型 |
varchar(size) | 0~65535字节 | 可变长度字符串 | String | chat[] |
text | 0~65535字节 | 长文本数据 | String | char[] |
mediumtext | 0~16777215字节 | 中等长度文本数据 | String | char[] |
longtext | 0~4294967295字节 | 极大文本数据 | String | char[] |
blob | 0~65535字节 | 二进制形式的长文本数据。存储的都是二进制形式的文件流,如:音频文件,图片文件,视频文件。 不建议在数据库中直接存储它,因为它会非常占用空间,通常做法是将其存储到专门的文件系统服务器(如阿里云的OOS)。 | byte[] | char[] |
3.日期类型
数据类型 | 大小 | 说明 | 对应java类型 | 对应C类型 |
datetime (时间) | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换。 | java.util.Date, java.sql.Timestamp | MYSQL_TIME |
timestamp (时间戳) | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date, java.sql.Timestamp | MYSQL_TIME |
时间戳是11位(s)和13位(ms,更精确)的数字。
时间和时间戳可以相互转换。