zoukankan      html  css  js  c++  java
  • Python 39 数据库的数据类型

    一:整型

    为什么需要 数据分类?  

    1、为了描述事物更加准确  

    2、描述起来更方便  

    3、节省内存空间     

    例:1 a 你     utf8 下 5个字节   

          1 a b c   unicode 6个字节

    mysql支持的数据类型

    整型:从小到大有tinyint(***)    smallint(***)    mediumint(***)    int(*****)    bigint(***)  

    字节数:     分别占了    1                   2                    3                      4              8   个字节  

    默认情况下整型是有符号的,需要用一个二进制位存储符号  

    给整型加上约束 unsigned 来表示无符号  

    如果数据超出范围就尽可能保存最大的,例如 在无符号保存256,其实存的255  

    如果有符号 例如tinyint 保存-1280 其实存的是-128 是最小值

     修改严格模式:

     以上特性的出现是因为mysql处于非严格模式:出现错误不会保存,会尝试自己去修改错误     

    查看当前模式 show variables like "sql_mode";     

    修改为严格模式 set variables sql_mode="STICT_TRANS_TABLBS";  

    默认是严格模式,在严格模式下,如果超出范围就直接报错,在一些版本中默认就是严格模式!     

    在我们的正常开发中,我们应该先判断数据的正确性,没有问题在发给数据库

     怎么选择:得根据实际情况来判断,能够保存你的数据的最小类型

     长度限制对于整型的意义:     

    create table t10 value(id int(1));     

    insert into t10 value(4545555);     

    select *from t10;     

    发现这个数也存储成功,说明这里长度指的不是存储容量限制,而是显示的宽度,如果你的数据超过了显示宽度有几个显示几个,如果不足 则补全到指定长度 得告诉它用什么来补全     

    create table t13(id int(10) zerofill);     

    总结:不是容量限制 而是 显示宽度 要限制显示宽度      

    1、创建表时 给整型加上宽度      

    2、加上zerofill约束

    二:浮点型

    浮点型 即 小数型

    分类(float):float(*****)   double(****)   decimal(*****)  

    字节数:          4                  8                不确定(手动指定)

    给浮点设置宽度限制

    float(m,d)

    double(m,d)

    decimal(m,d)

    长度说明(*****)

    m表示 这个浮点数整体的长度

    d表示 小数部分的长度

    例如:float(5,3) 最大值:99.999

    区别(*****)

    相同点:小数部分最大长度都是30  float 和 double 的最大长度为255

    不同点:decimal 的整体最大长度为65  精度不同  double 比 float 精度高  decimal 是准确的 不会丢失精度

    如何选择:你对精确度要求高你就使用 decimal

    三:字符型

    分类

    char 定长字符

    varchar 变长字符

    char 类型的长度是固定 无论你存储的数据有多长 占用的容量都一样

    char(3) 存储的数据为"a"  在硬盘保存的数据还是占3字符长度 实际保存的是"a"

    varchar 长度是可变的 存储的数据有多长就占用多长

    varchar(3)存储的数据为"a"  在硬盘保存的数据还是占1字符长度 实际保存的是"a"

    zxc asd qwe char(3)

    (lbytes+zxc)(lbytes+asd)(lbytes+qwe)varchar(3)

    如果是可变长度 则有问题 不知道数据从哪里结束 所以需要有一个位置保存数据的长度

    vharchar 能支持的最大长度是65535 用于保存数据长度的数据最长两个bytes

    如果是char类型 如果你的数据不足指定长度 就在后面用空格补全

    验证:    

    使用一个 char_length 的函数 可以查看字符的长度    

    create table t18(a char(4),b varchar(4));    

    insert into t18  value("x","x");    

    select char_length(a),char_length(b) from t18;    

    两个字段的长度都为1

    结论:    

    这是因为 mysql 在存储时 自动加上的空格 对使用者而言是没有意义的 所以mysql自动帮你处理掉空格了    

    我们可以设置sql模式 来让它现出原形    

    set global sql_mode="PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"    

    设置完成后重启mysql 再次查询长度

    注意:    

    当你在执行这样的查询语句时  mysql会自动将参数末尾的空格去除    

    select *from t19 where name="cs"    

    当你在使用模糊搜索时,要注意 定长字符 后面可能会有空格 所以最好在后面加上百分号%    

    select *from t19 where name like "cs";  

    % 任意个数的任意字符  

    _1个任务字符

    如何选择

    char :存取效率高,浪费存储空间

    varchar:存取效率低于char,使用起来感受不到区别 通常用的是char

    char和varchar 长度都比较小 最大就是65535

    大文本类型:    

    TEXT 系列:TINYTEXT TEXT MEDIUMTEXT LONGTEXT 文本是带有编码    

    BLOB 系列:TINYBLOB BLOB MEDIUMBLOB LONGBLB 也是字符数据 但是不带编码       

    二进制类型:     用于存储多媒体数据 比如视频,但是我们一般不会将多媒体数据存到数据 而是存储文件路径地址    

    BINARY 系列:BINARY VARBINARY 存储二进制数据    

  • 相关阅读:
    (转)数据库中索引的策略和设计
    (转)冷备份与热备份、双机热备与容错
    (转)Mysql数据库存储引擎
    (转)B-树和B+树的应用:数据搜索和数据库索引
    mock实例方法
    mockito模拟静态方法
    mock测试类的时候,添加@InjectMocks
    已经mock类中引用的其它service类,但是在invoke私有方法的时候,该service类是空值
    inside when() you don't call method on mock but on some other object
    org.mockito.exceptions.misusing.MissingMethodInvocationException: when() requires an argument which has to be 'a method call on a mock'
  • 原文地址:https://www.cnblogs.com/zedong/p/9636531.html
Copyright © 2011-2022 走看看