MySql 数据类型

2018-09-09  本文已影响0人  szn好色仙人
选择优化的数据类型
整数类型
名称 占用内存(字节)
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT 4
BIGINT 8
实数类型
名称 占用内存(字节)
DECIMAL [1, 65]
FLOAT 4
DOUBLE 8
字符串类型
名称 备注
VARCHAR vachar(N) 用来存储非二进制字符串,插入时,对于少于N个字符的不填补空格,查询时,尾部的空格不会被丢弃掉
CHAR char(N)用来存储非二进制字符串,插入时,对于少于N个字符的会自动在尾部加空格,查询时,尾部的空格就会被丢弃掉
BINARY binary(N)存储二进制字符串,插入进,少于N个字节的会自动在尾部加0x00,取出时,所有的字节都保留,返回定义长度的字节长度
VARBINARY varbinary在插入不会去填补0x00字节,查询的时候也不会丢弃任何字节
BLOB 用于存储大型二进制数据。TINYBLOB(255),BLOB(65535),MEDIUMBLOB(16MB-1),LONGBLOB(4GB-1)
TEXT 用于存储大型字符串。TINYTEXT(255),TEXT(65535),MEDIUMTEXT(16MB-1),LONGTEXT(4GB-1)
使用枚举代替字符串类型
create table sznTable(v enum('banana', 'apple'));
insert into sznTable(v) values('apple'),('banana');
select * from sznTable select v + 1 from sznTable select * from sznTable order by v
apple 2 banana
banana 3 apple
日期与时间类型
名称 备注
DATATIME 此类型能保存大范围的值,从1001年到9999年,精度为秒
把时间封装到YYYYMMDDHHMMSS的整数中
与时区无关
使用8字节的存储空间
默认情况下,MySql以一种可排序、无歧义的格式显示此类型的值,例如:"2018-09-10 20:29:00"
TIMESTAMP 保存了从 1970年1月1日 0点0分0秒 以来的秒计数,和UNIX时间戳相同
使用4字节的存储空间
提供FROM_UNIXTIME()UNIX_TIMESTAMP,进行UNXI时间戳与日期的转换
与时区相关
TIMESTAMP时间戳在创建的时候可以有多重不同的特性:
  • 在创建新记录和修改现有记录的时候都对这个数据列刷新:
    TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • 在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • 在创建新记录的时候把这个字段设置为0,以后修改时刷新它:
    TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • 在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它:
    TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss' ON UPDATE CURRENT_TIMESTAMP
  • 默认情况下,如果插入时没有指定第一个TIMESTAMP列的值,MySql会设置这个列的值为当前时间,更新时也是如此
create table sznTest
(
    t0 timestamp,
    t1 timestamp default current_timestamp on update current_timestamp,
    t2 timestamp default current_timestamp,
    t3 timestamp on update current_timestamp,
    t4 timestamp default '2018-09-10 20:54:00' on update current_timestamp
);
位数据类型
名称 备注
BIT 可以使用BIT列存储一个或多个true/false值
BIT(1)定义一个包含单个位的字段,以此类推,最大长度是64
MySql将BIT当做字符串类型而非数据类型,然而在数字上下文中会将其转为数字
SET 最多保存64个元素的集合
在MySql中是以一系列打包的位的集合来表示的,一般无法在SET列中通过索引查找
主要缺点:改变列的定义时需要用ALTER TABLE,代价可能会很高

1~8成员的集合,占1个字节
9~16成员的集合,占2个字节
17~24成员的集合,占3个字节
25~32成员的集合,占4个字节
33~64成员的集合,占8个字节
create table t (v bit(8));
insert into t (v) values(b'00111001');
select * from t select v + 0 as value from t
9 57
create table t (v set('szn', 'slz', 'szy'));
insert into t(v) value('szn');
insert into t(v) values('szn,slz');
insert into t(v) values('szn,szy');
select * from t select v + 0 as value from t
szn 1
szn,slz 3
szn,szy 5
上一篇 下一篇

猜你喜欢

热点阅读