zoukankan      html  css  js  c++  java
  • mysql中的数据类型

     1 整型

     

    2 定点型 decimal, numeric, 在mysql中以binary形式储存,用于精确存储数值。

      decimal(m,n): m为最大有效位数(不超过65,默认为10),用于控制数值的精度,n为最大小数位数

    3 浮点型 float(4 bytes), double(8bytes) , 用于近似存储数值。

      float(m,n): m为最大有效位数(0-23), n为最大小数位数

      double(m, n):m为最大有效位数(24-53), n为最大小数位数

      但是这里的m并不能用于控制精度,而是用于确定存储空间的大小(是float还是double).

      为了保持最大的可移植性,一般最好不要对m和n进行限制。 

    4 日期时间类型

      date: mysql默认以'YYYY-MM-DD'格式展现date数据, 有效范围是'1000-01-01' 到 '9999-12-31'

      datetime: 默认展现格式 'YYYY-MM-DD HH:MM:SS[.fraction]', 有效范围'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999',最高时间精度可以到微秒(6位小数)

      timestamp: 有效范围'1970-01-01 00:00:01.000000' 到'2038-01-19 03:14:07.999999', timestamp会将当地时间转化成UTC进行存储,然后再转化成当地时间进行展示,默认当前时区为服务器所在时区。

      注:

        1. mysql会将无效的date, datetime, timestamp 所有位都置零进行保存。

        2. 2位年份转化为4位的规则:00-69==》2000-2069;70-99==》1970-1999; 

        3. 可以为timestamp和datetime赋值当前时间的变量或者函数CURRENT_TIMESTAMP()NOW()LOCALTIMELOCALTIME()LOCALTIMESTAMP, 和                           LOCALTIMESTAMP(),这些量都具有相同的含义。 
     

      time: 默认展现为'HH:MM:SS[.fraction]'或者 'HHH:MM:SS[.fraction]'格式, 有效范围为'-838:59:59'到 '838:59:59'。大的时间主要用于表征事件的时间差。

        注意:'1234'表示'00:12:34', '12:34'表示'12:34:00'

      year:占1byte。 可以限定为year(4)(有效范围:1901 to 2155)和year(2) (有效范围:1970-2069)

        注意:'00'在year(2)和year(4)中代表的分别是2000和0000.

          非法年份会记录成0000.  

          年份可以为'1999',也可以为数字1999. 

          年份可以用now()返回值赋值。

    5 字符串类型 

      char(m): 定长字符串,m取值范围0-255

      varchar(m): 变长字符串,m为字符串的最大长度,取值范围0-65535。 varchar在字符串前会有1-2bytes的长度前缀,用于标记可变字符串的长度。

      注意:1. 对于过长的字符串,varchar类型会在插入前截断,并且输出警告, char 类型直接截断无反馈。

        2. char类型读取时会截断尾部空白字符,而varchar不会 

        3. 除了模式匹配外,mysql中的字符串比较都是忽略尾部空白字符的。 

    6 二进制类型

      bit(m): 用于存储二进制值,m为最大二进制位数(1-64)。赋值可以用b'value', 例如 b'10001000'等等。

      binary(m): 类似char,但是其存储的是二进制字符串,而没有包含字符集,因此所有的排序比较都是根据二进制代表的数值来进行的。m为最大可储存的byte数, 0<=m<=255.

      varbinary: 类似varchar, m<65535, 其实际所占空间为存入的内容长度+1或者2.

        注意:1. binary插入数据时,位数不足会用ox00在最右边填充, 而varbinary没有填充。

          2. binary没有字符集和字符规则,而char binary存储的是普通字符串通过二进制规则进行存储,这二者是不一样的。

      blob (TINYBLOB-2^8+1bytesBLOB-2^16+1bytesMEDIUMBLOB-2^24+2bytes, and LONGBLOB-2^32+2bytes): blob是binary large object. 

      text (TINYTEXT-2^8+1bytesTEXT-2^16+1bytesMEDIUMTEXT-2^24+2bytes, and LONGTEXT-2^32+2bytes):

        注意:blob和text的存取无填充无截断。 

      enum:可取的选项数小于65535, 实际操作中一般不多于3000. 

        1. 索引从1开始 

        2. 插入enum中的字符串如果不存在与选项中,则会插入空字符串,索引为0. 

        3. 如果enum列可以为空,则默认为空,否则默认为第一个索引的值。 

        4. enum的排序是根据索引值来进行的。如果要按字母顺序表来进行,则 要使用ORDER BY CAST(col AS CHAR)

        5. enum的内容只能通过常量来建立 

      set: 最多可以有64个不同的成员

        1. 重复的成员会导致警告,或者报错(strict mode) 

        2. 自动删除结尾空白

        3. set以数值存储。每个成员代表一个bit位,若以数值返回成员则分别为1, 2, 4, 8...... 

        4. 插入数据时,每个成员都只计入一次

        5. 查询, 使用find_in_set或者like, 例如: 

          mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;
          mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

          也可以查找索引和多个成员, 如:
          mysql> SELECT * FROM tbl_name WHERE set_col & 1;
          mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2';
  • 相关阅读:
    合格linux运维人员必会的30道shell编程实践题及讲解
    合格linux运维人员必会的30道shell编程实践题及讲解-13
    合格linux运维人员必会的30道shell编程实践题及讲解-12
    合格linux运维人员必会的30道shell编程实践题及讲解-11
    合格linux运维人员必会的30道shell编程实践题及讲解-10
    合格linux运维人员必会的30道shell编程实践题及讲解-09
    学习Vim的四周计划
    Linux shell 逻辑运算符、逻辑表达式详解
    60个DevOps开源工具,你在用哪些?
    误删重要文件怎么办?学会Linux 救援模式再也不担心
  • 原文地址:https://www.cnblogs.com/noway-neway/p/5208510.html
Copyright © 2011-2022 走看看