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';
  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/noway-neway/p/5208510.html
Copyright © 2011-2022 走看看