• 数据类型


    一、介绍

      存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的。

    mysql常用数据类型概览

    #1、数字;
        整型:tinyinit 、int 、bigint
        小数:
                float:在位数比较短的情况下不精准
                double:在位数比较长的情况下不精准
                            0.000001230123123123
                            存成:0.000001230000
                decimal:(如果用小数,则推荐使用decimal)
                             精准
                             内部原理是以字符串形式去存
    
    #2、字符串
        char(10):简单粗暴,浪费空间,存取速度快
                    root存成root000000
        varchar:精准,节省空间,存取速度慢
        sql优化:创建表时,定长的类型往前放,变长的往后防
                                     比如性别                例如地址或描述信息
        >255个字符,超过了就把文件路径存放到数据库中。
                            比如图片,视频等找一个文件服务器,数据库中只存路径或url
    
    #3、时间类型:
        最常用:datetime
    
    #4、枚举类型与集合类型
    

    二、数值类型

    1、整数类型

    整数类型:tinyint / smallint / mediumint / int / bigint

    作用:存储年龄,等级,id,各种号码等

    ===========================================
    tinint [(m)] [unsigned] [zerofill]
        小整数,数据类型用于保存一些范围的整数数值范围:
            有符号:-128~127
            无符号:0~255
        PS:MySQL中无布尔值,使用tinyint(1)构造。
    
    ===========================================
    int[(m)] [unsigned] [zerofill]
        整数,数据类型用于保存一些范围的整数数值范围:
            有符号:-2147483648~2147483647
            无符号:0`4294967295
    
    ===========================================
    bigint [(m)] [unsigned] [zerofill]
        大整数,数据类型用于保存一些范围的整数数值范围:
            有符号:-9223372036854775808~9223372036854775808
            无符号:0~18446744073709551615
    
    ===================有符号和无符号tinyint===============
    
    #tinyint 默认为有符号
    
    create table t1(x tinyint);       #默认为有符号,即数字前有正负号
    desc t1;
    insert into t1 values(-129),(-128),(127),(128);
    select * from t1;
    
    +------+
    | x    |
    +------+
    | -128 | #-129存成了-128
    | -128 | #有符号,最小值为-128
    |  127 | #有符号,最大值127
    |  127 | #128存成了127
    +------+
    
    #设置无符号tinyint
    
    create table t2(x tinyint unsigned);
    insert into t2 values(-1),(0),(255),(256);
    select * from t2;
    
    +------+
    | x    |
    +------+
    |    0 | -1存成了0
    |    0 | #无符号,最小值为0
    |  255 | #无符号,最大值为255
    |  255 | #256存成了255
    +------+
    
    
    
    =================有符号和无符号int==================
    
    #int 默认为有符号
    
    create table t3(x,int);    #默认为有符号整数
    insert into t3 values(-2147483649),(-2147483648),(2147483647),(2147483648);
    select * from t3;
    
    +-------------+
    | x           |
    +-------------+
    | -2147483648 | #-2147483649存成了-2147483648
    | -2147483648 | #有符号,最小值为-2147483648
    |  2147483647 | #有符号,最大值为2147483647
    |  2147483647 | #2147483648存成了2147483647
    +-------------+
    
    #设置无符号int
    create table t4(x int unsigned);
    insert into t4 values(-1),(0),(4294967295),(4294967296);
    select * from t4;
    
    +------------+
    | x          |
    +------------+
    |          0 | #-1存成了0
    |          0 | #无符号,最小值为0
    | 4294967295 | #无符号,最大值为4294967295
    | 4294967295 | #4294967296存成了4294967295
    +------------+
    
    ===================有符号和无符号bigint==================
    
    # 设置有符号bigint
    
    create table t6(x bigint);
    insert into t5 values(-9223372036854775809),(-9223372036854775808),(9223372036854775807),(9223372036854775808);
    select * from t5;
    
    +-------------------------------+
    | x                                      |
    +-------------------------------+
    | -9223372036854775808 |
    | -9223372036854775808 |
    |  9223372036854775807 |
    |  9223372036854775807 |
    +--------------------------------+
    
    #设置无符号bigint
    
    create table t6(x bigint unsigned);
    insert into t6 values(-1),(0),(18446744073709551615),(18446744073709551616);
    select * from t6;
    
    +--------------------------------+
    | x                                       |
    +---------------------------------+
    |                                       0 |
    |                                       0 |
    | 18446744073709551615 |
    | 18446744073709551615 |
    +--------------------------------+
    
    ===================用zerofill测试整数类型的显示宽度================
    
    create table t7(x int(3) zerofill);
    insert into t7 values(1),(11),(111),(1111);
    select * from t7;
    
    +------+
    | x      |
    +------+
    |  001 |
    |  011 |
    |  111 |
    | 1111 | #超过宽度限制仍然可以存
    +------+
    
    # int(宽度)       这里的宽度只是显示宽度,不是实际的存储宽度
    

    注意:为该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关,存储范围如下。其实我们完全没必要为整数 

  • 相关阅读:
    链表的一些规律总结
    acclib的尝试
    初入指针
    在一个堆成矩阵中的循环判断(井字棋游戏)
    初学c语言的小套路汇总
    在循环中计算式一正一负的处理
    最大公约数的计算方法
    大数加法
    大数乘法
    复制可见区域到新表
  • 原文地址:https://www.cnblogs.com/hzhcdhm/p/8044745.html
Copyright © 2020-2023  润新知