常见的列类型

10 篇文章 0 订阅

常见的列类型

整形

  • 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)
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龙的代码在报错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值