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';
posted on 2016-02-23 16:35  迷阳  阅读(574)  评论(0编辑  收藏  举报