04 MySQL数据类型
2024-09-06 07:09:33
MySQL支持的数据类型
1.数值类型:
a.整数类型
TINYINT | 1字节 |
有符号(-128~127);
无符号(0~255)
|
SMALLINT | 2字节 |
有符号(-32768~32767);
无符号(0~65535)
|
MEDIUMINT | 3字节 | |
INT , INTEGER | 4字节 | |
BIGINT | 8字节 |
b.浮点类型
FLOAT | 4字节 | |
DOUBLE | 8字节 |
c.定点数类型
DEC(M,D) | (M+2)字节 | |
DECIMAL(M,D) | (M+2)字节 |
d.位类型
BIT(M) | 1~8字节 | BIT(1)~BIT(64) |
⚠️注意:
1).AUTO_INCREMENT 属性只能定义在整数类型的column上,并且该字段要定义为NOT NULL 以及必须是PRIMARY KEY 或者是UNIQUE ;
2).如果某一列定义ZEROFILL, 那么MySQL会自动添加UNSIGNED属性,即该列是无符号的。
3).定位数中, M代表:一共显示M位数字;D是指小数位有D个数字;
浮点数使用 (M,D)这种用法是非标准的,如果进行数据库的迁移,最好不要这么使用.
FLOAT和DOUBLE的默认精度是由硬件和操作系统决定的;DECIMAL默认整数位为10,小数位为0;
如果插入数据范围超过了限制范围(小数部分)
如果是浮点型,会进行四舍五入
如果是定位型,在SQLMode模式下无法插入记录;在非SQLMode模式,会弹出warning,数据按照四舍五入
;整数部分应该会报错 todo;
4).BIT(M),M取值范围1~64,默认为1.用于保存二进制数据.例如BIT(1) 可以保存0和1,但是无法保存2,因为2在二进制中是10,占两位,报错;
使用SELECT不能直接正常显示BIT类型数据,序号借助BIT() 或HEX()函数进行显示.
2.日期类型
DATE | 4字节 |
DATETIME | 8字节 |
TIMESTAMP | 4字节 |
TIME | 3字节 |
YEAR | 1字节 |
注意:
表中第一个TIMESTAMP类型的数据默认值为CURRENT_TIMESTAMP,后面如果还有该类型,默认值为0;
也就是说一个表中最多只能有一个默认值为CURRENT_TIMESTAMP的TIMESTAMP类型的字段.
TIMESTAMP 会受时区影响,而DATETIME不会.
SHOW VARIABLES LIKE 'time_zone' ;
SET time_zone = '+9:00';
TIMESTAMP最多能存到2038年的某一天,所以不适合存太久远的时间.如果溢出,系统会使用0000-00-00 00:00:00 进行填补.
3.字符串类型
CHAR(M) | M字节 | M取值范围:0~255 |
VARCHAR(M) | M取值范围:0~65535 | |
TINIBLOB | ||
BLOB | ||
MEDIUMBLOB | ||
LONGBLOB | ||
TINYTEXT | ||
TEXT | ||
MEDIUMTEXT | ||
LONGTEXT | ||
VARBINARY(M) | ||
BINARY(M) | M字节 |
NOTE :
CHAR类型会去掉数据后面的空格;VARCHAR类型则会保留.
BINARY和VARBINARY 与CHAR/VARCHAR 区别是前者包含二进制字符串,而后者不包含
CREATE TABLE t (c BINARY(3)) ;
INSERT INTO t SET c='a'; --注意插入语句与数值型的不同
SELECT * , HEX(c) , c='a' , c='a\0' , c='a\0\0' FROM t ;
4.枚举类型ENUM
对于第1~255个成员的枚举,需要1个字节存储;
对于255~65335个成员需要2个字节来存储.
枚举类型对数据是忽略大小写的.
如果插入不在范围,则默认插入第一个值.
ENUM类型只允许从值集合中选取单个值,不可以一次取多个值.
CREATE TBALE t (gender ENUM('M','F'));
INSERT INTO t VALUES('M'),('1'),('f'),(NULL);
5.SET类型
存储方式:
1~8个成员 | 占1个字节 |
9~16个成员 | 占2个字节 |
17~24个成员 | 占3个字节 |
25~32个成员 | 占4个字节 |
33~64个成员 | 占8个字节 |
SET类型与ENUM类型除了存储方式,最大的区别就是 SET可以一次性选取多个成员.
CREATE TBALE t (col SET('a','b','c','d'));
INSERT INTO t VALUES('a,d,a'),('a,b'),('c');
--其中'a,d,a'会被去重,真正存储的是'a,d'
最新文章
- Eclipse Java注释模板设置详解
- zabbix注入过程分析
- .NET使用OpenSSL生成的pem密钥文件
- bea weblogic workshop中文乱码
- Django中的Model(表结构)
- Nginx优化—配置优化
- python函数(4):递归函数及二分查找算法
- BZOJ4970 IOI2004 empodia障碍段
- 表单中GET与POST的区别
- Google Chrome 圆形进度条
- android 运行时异常捕获
- mysql 5.7~默认sql_mode解读
- Zookeeper与Curator二三事【坑爹】
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫
- CH #46A - 磁力块 - [分块]
- canal入门Demo
- JavaScript 从定义到执行,你应该知道的那些事
- sql server 2012 打开提示无效的许可证数据。需要重新安装
- 【解决】 64位笔记本丢失 MSVCR110.dll win10 phpstudy2017
- form_tag