zoukankan      html  css  js  c++  java
  • MySQL字段类型简介

    MySQL的数据类型非常多,这节只介绍数据类型,下节介绍如何正确选择优化的数据类型。
    整数类型
    存储整数可选择这几种类型 :TINYINT,SMALLINT,MEDIUINT,INT,BIGINT。分别是8,16,24,32,64位存储空间。可以存储的值的范围从-2的(N-1)次方到2的(N-1)次方-1,N是存储空间位数。
    UNSIGNED是整数类型可选属性,表示不允许负数,这样一来存储的整数可能大一倍。比如TINYINT可存储范围是-128 ~ 127,TINYINT UNSIGNED可存储范围是0 ~ 255。
    当我们为整数类型指定长度时,比例INT(11),其实对大多数应用是没有作用的:不会限制存储的范围,只规定了MySQL的一些交互工具显示的字符数。对存储来讲,INT(1)和INT(10)是相同的。
    实数类型
    实数带有小数点。可选的类型有:FLOAT,DOUBLE,DECIMAL。其中FLOAT和DOUBLE支持浮点运算,FLOAT占用4个字节,DOUBLE占用8个字节。在MySQL5.0更高的版本中DECIMAL支持精确计算,采用的是MySQL服务实现的高精度计算,因此比浮点计算慢些。
    因为占用更多的存储空间和复杂的计算,只有在对小数进行精确计算时才推荐使用DECIMAL。其实也有另一种实现方案:用BIGINT替代DECIMAL。将要存储的数字转换成最小单位,消除小数后存储到BIGINT,取出数据之后再除以小数倍数即可。例如存储RMB金额100.12,将100.12*100 = 10012,存储到BIGINT。查询出之后在程序中将10012 / 100 = 100.12还原。这样就避免了浮点运算不精确和DECIMAL代价较高的问题。
    字符串类型
    常见的有变长VARCHAR和固定长度的CHAR。变长的VARCHAR理论上更节省存储空间。但并非所有情况都是如此,这个问题下节再讨论。CHAR类型是定长的,MySQL问题分配足够的空间。
    还有BINARY和VARBINARY,用来储存二进制字符串,储存的是字节码。有时候存储二进制字节码用来比较很有优势:1,大小写敏感;2,比较BINARY字符串时,每次按一个字节的数值比较,因此更简单也更快。
    大字段
    字符类型有:TINYTEXT,SMALLTEXT,TEXT,MEDIUTEXT,LONGTEXT;
    二进制类型有:TINYBLOB,SMALLBLOB,BLOB,MEDIUBLOB,LONGBLOB。
    TEXT是SMALLTEXT的同义词,BLOB是SMALLBLOB的同义词。
    日期类型
    日期类型有DATE,TIME,YEAR,DATETIME,TIMESTAMP。
    日期类型一般可选性不多,主要是DATETIME和TIMESTAMP之间的区别:
     
    保存范围
    时区有关
    存储空间
    DATETIME
    1001年 ~ 9999年
    8字节
    TIMESTAMP
    1970年 ~2038年
    4字节
    如果没有特殊情况,一般尽量使用TIMESTAMP,如果要求时区相关就必须使用TIMESTAMP,还有就是TIMESTAMP保存的是1970年以来的秒数,和UNIX时间戳是一样的,4个字节的存储比DATETIME效率更高。
    目前MySQL不支持保存比毫秒更精确度更高的时间,只能自己想办法解决,可以采用将毫秒或者微秒转换成整型保存在BIGINT类型。
  • 相关阅读:
    春色人间
    如是
    Go -- FileManage 自建云盘
    JavaScript -- 定义二维数组
    mysql 碎片清理
    vue2.0项目中使用Ueditor富文本编辑器示例
    浅谈css中一个元素如何在其父元素居中显示
    CSS -- 文字竖直居中
    memcached与redis区别
    mac -- 安装OpenCV
  • 原文地址:https://www.cnblogs.com/c04s31602/p/11210337.html
Copyright © 2011-2022 走看看