• 史上最全的mysql数据类型汇总(下)


    接着上文继续来梳理,上文我们写到了日期与时间类型中的time类型,然后我们接着来写日期与时间类型中的date类型。

    date类型

    date类型用在仅需要日期值时,没有时间部分,在存储时需要3字节。

    日期格式为YYYY-MM-DD。其中YYYY表示年,MM表示月,DD表示日。

    (1)以 ‘YYYY-MM-DD’ 或者 ‘YYYYMMDD’ 字符串格式表示的日期,取值范围为 ‘1000-01-01’ ~ ‘9999-12-3’ ;例如输入’2022-12-31’或者‘20221231’,插入数据库的日期都为2022-12-31;

    (2)以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示的日期,在这里‘YY’表示两位的年值。包含两位年值的日期会令人模糊,因为不知道世纪。mysql使用以下规则解释两位年值:‘00~69’范围的年值转换为2000-2069,'70-99’范围的年值转换为1970~1999

    (3)以YY-MM-DD或者YYMMDD数字格式表示的日期,与前面相似,00~69范围的年值转换为2000~2069,70~99范围的年值转换为1970~1999。

    (4)使用CURRENT_DATE或者NOW(),插入当前系统日期。

    举个例子:

    创建一个名为yunweijia_4的数据表;

    mysql> create table yunweijia_4 (d date);
    Query OK, 0 rows affected (0.03 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4

    向表中插入一些值;

    mysql> insert into yunweijia_4 values ('1999-09-09'), ('19990909'), ('20221010');
    Query OK, 3 rows affected (0.01 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后查看下结果:

    mysql> select * from yunweijia_4;
    +------------+
    | d          |
    +------------+
    | 1999-09-09 |
    | 1999-09-09 |
    | 2022-10-10 |
    +------------+
    3 rows in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    再举个例子:

    删除数据表yunweijia_4中的数据;

    delete from yunweijia_4;
    
    • 1

    在表中插入数据;

    mysql> insert into yunweijia_4 values ('99-09-09'), ('990909'), ('000101'), ('111111');
    Query OK, 4 rows affected (0.01 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查看下结果:

    mysql> select * from yunweijia_4;
    +------------+
    | d          |
    +------------+
    | 1999-09-09 |
    | 1999-09-09 |
    | 2000-01-01 |
    | 2011-11-11 |
    +------------+
    4 rows in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    又举个例子:

    老规矩,先删除表中的数据

    mysql> delete from yunweijia_4;
    Query OK, 4 rows affected (0.01 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4

    向表中插入数据;

    mysql> insert into yunweijia_4 values (19990909), (990909), (000101), (111111);
    Query OK, 4 rows affected (0.01 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查看下结果:

    mysql> select * from yunweijia_4;
    +------------+
    | d          |
    +------------+
    | 1999-09-09 |
    | 1999-09-09 |
    | 2000-01-01 |
    | 2011-11-11 |
    +------------+
    4 rows in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    又又举个例子:

    删除表中数据;

    mysql> delete from yunweijia_4;
    Query OK, 4 rows affected (0.01 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4

    插入系统当前时间:

    mysql> insert into yunweijia_4 values (current_date()), (now());
    Query OK, 2 rows affected, 1 warning (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 1
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查看结果:

    mysql> select * from yunweijia_4;
    +------------+
    | d          |
    +------------+
    | 2022-07-09 |
    | 2022-07-09 |
    +------------+
    2 rows in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    CURRENT_DATE只返回当前日期值,不包括时间部分;NOW()函数返回日期和时间值,在保存到数据库时,只保留了其日期部分。

    datetime类型

    DATETIME类型用于需要同时包含日期和时间信息的值,在存储时需要8字节。日期格式为‘YYYY-MM-DD HH:MM:SS’。其中,YYYY表示年,MM表示月,DD表示日,HH表示小时,MM表示分钟,SS表示秒。在给DATETIME类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATETIME的日期格式即可。

    (1)以‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的值,取值范围为‘1000-01-01 00:00:00’~‘9999-12-3 23:59:59’;

    (2)以‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期,在这里YY表示两位的年值。与前面相同,‘00~69’范围的年值转换为‘2000~2069’,‘70~99’范围的年值转换为‘1970~1999’。

    (3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间。

    TIMESTAMP类型

    TIMESTAMP的显示格式与DATETIME相同,显示宽度固定在19个字符,日期格式为YYYY-MM-DD HH:MM:SS,在存储时需要4字节。TIMESTAMP列的取值范围小于DATETIME的取值范围,为‘1970-01-01 00:00:01’UTC~‘2038-01-1903:14:07’UTC。其中,UTC(Coordinated Universal Time)为世界标准时间,因此在插入数据时,要保证在合法的取值范围内。

    注意点:

    由于datetime类型和TIMESTAMP和上面的用法大差不差,所以这里就不再一一举例了。

    文本字符串类型

    字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。

    mysql支持两类字符串数据:文本字符串和二进制字符串;

    文本字符串可以进行区分或者不区分大小写的串比较,还可以进行模式匹配查找。

    mysql中,文本字符串类型指的是:

    • CHAR

    • VARCHAR

    • TEXT

    • ENUM

    • SET

    详细可以看下表:

    图片

    VARCHARTEXT类型与BLOB都是变长类型,其存储需求取决于列值的实际长度(在前面的表格中用L表示),而不是取决于类型的最大可能尺寸

    例如,一个VARCHAR(10)列能保存最大长度为10个字符的字符串,实际的存储需要是字符串的长度L加上1字节(记录字符串的长度)。对于字符“abcd”,L是4而存储要求是5字节。

    CHAR和VARCHAR类型

    CHAR(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格,以达到指定的长度。M表示列长度,M的范围是0~255个字符。

    例如:CAHR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4。当检索到CHAR值时,尾部的空格将被删除。

    VARCHAR(M)是长度可变的字符串,M表示最大的列长度。M的范围是0~65535。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加1。

    例如:VARCAHR(50)定义了一个最大长度为50的字符串,如果插入的字符串只有10个字符,则实际存储的字符串为10个字符和一个字符串结束字符。VARCHAR在对应值保存和检索时尾部的空格仍保留。

    我们看下CHAR(4)VARCHAR(4)存储的区别是什么:

    图片

    从上图的对比结果可以看到,CHAR(4)定义了固定长度为4的列,不管存入的数据长度为多少,所占用的空间均为4个字节;VARCHAR(4)定义的列所占的字节数为实际长度加1;

    但是查询时是不同的,我们可以通过下面的例子来看下;

    举个例子:

    创建一个名为yunweijia_5的数据表;

    mysql> create table yunweijia_5 (ch char(4), var varchar(4));
    Query OK, 0 rows affected (0.03 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4

    在这个数据表中插入一些数据;

    mysql> insert into yunweijia_5 values ('ab', 'ab');
    Query OK, 1 row affected (0.01 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4

    查看下结果:

    mysql> select concat ('(', ch, ')'), concat ('(', var, ')') from yunweijia_5;
    +-----------------------+------------------------+
    | concat ('(', ch, ')') | concat ('(', var, ')') |
    +-----------------------+------------------------+
    | (abc)                 | (abc)                  |
    +-----------------------+------------------------+
    1 row in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这里有问题,文档上面介绍的是,char在保存的时候会将空格删除,varchar会保留末尾的空格,但是从自身实践来看的话,不论是char还是varchar都将末尾的空格给删除了。

    TEXT类型

    TEXT列保存非二进制字符串,如文章内容、评论等。

    当保存或查询TEXT列的值时,不删除尾部空格。

    Text类型分为4种:

    剩余内容请转至VX公众号 “运维家” ,回复 “196” 查看。

    ------ “运维家” ,回复 “196” ------
    ------ “运维家” ,回复 “196” ------
    ------ “运维家” ,回复 “196” ------

    潍坊运维工程师招聘,硬件运维工程师发展前景,运维工程师个人规划,深圳阳光雨露运维工程师,事业单位招聘运维工程师;
    奇安信运维工程师面试,三一重工系统运维工程师,美亚柏科运维工程师面试题,环境工程的运维工程师;
    运维工程师都有什么方向,杭州运维工程师招聘阿里,桥梁运维工程师,桌面运维工程师培训计划。

  • 相关阅读:
    关于JDK8中的字符串常量池和String.intern()方法理解
    【leetcode】【2022/8/12】1282. 用户分组
    【Java】学习日记 Day22
    【JULY-1】DAY 1 二分查找
    解决ERR: cURL error 77: Unable to initialize NSS: -8023
    【二】2D测量 Metrology——align_metrology_model()算子
    最长递增子序列
    MySQL学习笔记(八 单表使用索引常见的索引失效 )
    Redis客户端和服务端如何通信?
    LayaBox---多状态---时间轴动画
  • 原文地址:https://blog.csdn.net/ouyangzhenxin/article/details/125887918