常见的列类型
整形
-
int[(m)][unsigned][zerofill]
int 表示有符号的整数类型,取值范围:-2147483648~2147483647 int unsigned 表示无符号的整数类型,取值范围:0~4294967295 int(5)zerofill 仅用于显示,当不满足5位时,按照左边补零,满足时正常显示
mysql> create table int_t( -> id int, -> uid int unsigned, -> zid int(5) zerofill -> )default charset=utf8; Query OK, 0 rows affected (0.02 sec) -- 插入数据 mysql> insert into int_t ( -> id,uid,zid) values (1,2,3); Query OK, 1 row affected (0.00 sec) -- 查看数据 mysql> select * from int_t; +------+------+-------+ | id | uid | zid | +------+------+-------+ | 1 | 2 | 00003 | +------+------+-------+ 1 row in set (0.00 sec) -- 出现这样的错误就是因为我们插入值位数出国了我们整数带符号类型的取值范围 mysql> insert into int_t(id,uid,zid) values (147483647112321312,2,30000); ERROR 1264 (22003): Out of range value for column 'id' at row 1
小数
decimal[(m[,d])][unsigned][zerofill]
准确的小值,m是数字的总个数(负号不算),d是小数点后的个数,m最大值为65,d的最大值为30.
mysql> create table l2(
-> id int not null primary key auto_increment,
-> salary decimal(8,2)
-> )default charset=utf8;
Query OK, 0 rows affected (0.06 sec)
mysql> insert into l2(id,salary)
-> values
-> (1,28);
Query OK, 1 row affected (0.04 sec)
mysql> select * from l2;
+----+--------+
| id | salary |
+----+--------+
| 1 | 28.00 |
+----+--------+
1 row in set (0.00 sec)
-- 这里要注意的是我们设置的是小数点后两位如果我们插入的值超过了小数点后两位系统会自动给我们进行四射五入进行保留两位小数的操作
mysql> insert into l2(salary) values (5.289);
Query OK, 1 row affected, 1 warning (0.04 sec)
mysql> insert into l2(salary) values (512456.28);
Query OK, 1 row affected (0.04 sec)
mysql> insert into l2(salary) values (512456.283);
Query OK, 1 row affected, 1 warning (0.04 sec)
mysql> insert into l2(salary) values (512456.2831);
Query OK, 1 row affected, 1 warning (0.04 sec)
mysql> select * from l2;
+----+-----------+
| id | salary |
+----+-----------+
| 1 | 28.00 |
| 2 | 5.29 |
| 3 | 512456.28 |
| 4 | 512456.28 |
| 5 | 512456.28 |
+----+-----------+
5 rows in set (0.00 sec)
-- 但是如果是整数部分超过了限制就会出现报错
mysql> insert into l2(salary) values (132456789.132);
ERROR 1264 (22003): Out of range value for column 'salary' at row 1
FLOAT[(m[,d])][unsigned][zerofill]
单精度浮点数,非准确小数值,m是数字的总个数,d是小数点后个数。
DOUBLE[(m[,d])][unsigned][zerofill]
双精度浮点数(非准确小数值),m是数字的总个数,d是小数点后个数
字符串
-
char(m)
定长字符串,m代表字符串的长度,最长可以容纳255个字符 定长的体现:即使内筒长度小于m,他也会占用m长度,但是如果超出了长度限制,并且你们mysql是出于一个严格模式的情况下就出现报错 使用场景:国定长度内容.
-
varchar(m)
变长字符串,m代表字符串的长度,最多可以容纳65535个字节 变长的体现:内容下雨m时候,会按照真实数据长度存储;如果是超出m的长度显示在严格模式下就会出现报错
text
text 数据类型用于存储保存变长的大字符串,可以出存储的字符多 一般情况下用于新闻文章等
基本很少用到
mediumtext
比text存储的字符还要多longtext
比mediumtext存储的字符还要多
时间类型
- datetime
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)
- timestamp
YYYY-MM-DD HH:MM:SS(1970-01-01 00:00:00/2037年)
对于timestamp,他把客户端插入的时间从当前时区转化为UTC(时间标准时间),进行存储查询的时候,再将其转化为客户端当前时区的时间进行返回
但是对于datetime来说,不做处理,原样写入原样输出
- date
YYYY-MM-DD (1000-01-01/9999-12-31)
- time
HH:MM:SS('-838:59:59'/'838:59:59')
mysql> create table l1(
-> id int(11) not null primary key auto_increment,
-> dt datetime,
-> tt timestamp,
-> date date,
-> t time
-> )default charset=utf8;
Query OK, 0 rows affected (0.03 sec)
mysql> desc l1;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| dt | datetime | YES | | NULL | |
| tt | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| date | date | YES | | NULL | |
| t | time | YES | | NULL | |
+-------+-----------+------+-----+-------------------+-----------------------------+
5 rows in set (0.00 sec)
mysql> insert into l1(dt,tt,date,t)
-> VALUES
-> ("2024-8-28 11:11:11","2024-8-28 11:11:11","2024-8-28","11:11:11");
Query OK, 1 row affected (0.01 sec)
# 查看时区
mysql> select * from l1;
+----+---------------------+---------------------+------------+----------+
| id | dt | tt | date | t |
+----+---------------------+---------------------+------------+----------+
| 1 | 2024-08-28 11:11:11 | 2024-08-28 11:11:11 | 2024-08-28 | 11:11:11 |
+----+---------------------+---------------------+------------+----------+
1 row in set (0.00 sec)