MySql的数据类型
来源:互联网 发布:淘宝退货卖家说我调包 编辑:程序博客网 时间:2024/05/20 17:07
在创建数据表的时候,定义字段值的时候,最纠结的莫过于选择哪个数据类型,char型还是varchar类型?确定类型后,又要纠结于给定多少长度呢?是(4)还是(50)? 存在这种问题莫过于对数据类型的一些特性还不了解,不能根据自己的需要选择合适的数据类型和长度,这样也能够优化查询,提高效率。
数值类型
INTEGER、SMALLINT、DECIMAL、NUMERICAL、BIT、INT等
常用:int(4)
注意括号中的4和能表示的数值大小没有关系,因为int这个类型就决定了它可以存储的数值大小。int一般是4个字节(bytes), 所以其大小是2147483647 (Signed) or 4294967295 (Unsigned)。 此处的
4只是表示当通过sql命令查询数据时,最终显示4位字符。在zerofill状态下,如果值假设为1,但是定义为int(4),那么查询出来后,显示是0001。
默认情况下是int(11)。
浮点型:float、double
也可以表示为float(M,D)、double(M,D)
定点型:decimal、numberic
也可以表示为decimal(M,D);
其中M表示总的数值位数(整数部分+小数部分),
D表示小数部分。例如: decimal(8, 2) 可以表示:999999.99
日期类型
DATE:
只表示年月日,不包含时分秒 ,格式为YYYY-MM-DD
TIME:
只表示时分秒,格式为 HH:MM:SS
DATETIME:
表示一个完整的时间,格式为 YYYY-MM-DD HH:MM:SS
TIMESTAMP :
常用的时间戳,表示格式为00000000000000,如果需要经常计算时间或者返回当前时间,可以使用此类型。
YEAR:
只表示年份,格式为YYYY。
字符串类型
char 和 varchar 比较:
都表示较短的字符串,主要区别在于char是固定长度的,范围在0-255,
varchar是可变长度的,范围在0-65535。 char(50),其中50表示50个字节数。比方说定义char(10)和varchar(10),插入“csdn”,那么char后面会补上6个空格,但是varchar会立马变成4。 由于char是固定长度的,方便程序的查找和存储,所以char类型的查询更快,主要是以空间换时间。
对于char和varchar的选择,根据数据量大小,以及对查询效率的要求来进行选择。一般如果长度变化不大,且查询效率要求高的,一般使用char。但是MySQL的升级,对varchar的效率逐渐在优化,如果数据量很大的情况下,使用varchar至少可以减少存储空间,较少读取数据时的磁盘IO次数。
其他数据类型
enum: 顾名思义枚举类型。最多65535个成员。
举例:create table t (gender enum(‘M’,’F’));
其中表示gender列是枚举类型,范围是M或者F。
在插入记录的时候,只能选择M或者F中一个,不区分大小写,在数据库中会统一转成大写,如果插入范围之外的值,会抛出异常。可以在表中插入NULL,也可以插入枚举值对应的元素顺序,比方说第一个枚举值对应1,如此下去。
SET: 也是一个集合。有多个元素,每次可以插入所有元素的若干子集。
TEXT: 只能保存字符数据(character),比方说:一篇文章或者日记等。
BLOB: 只能保存字节数据(byte)(二进制流),比方说图片。
TEXT和BLOB类型的列创建索引,不能直接使用整列作为索引,因为这样会让索引占据很大的内存。对于TEXT和BLOB列都是使用前缀索引,也就是列的前N个字节作为所以。
create index indexalias on tablename(column(N));
注意:使用like查询时候,%不要放置最前,这样索引不会被使用。
mysql建立表时候应该注意的:
1、表中必须有的字段
id,createtime, updatetime ; 字段的id 、创建时间和更新时间。
2、对于字段为is_xxx,表示是或者否的时候,由于mysql不支持boolean类型,所以使用的是0 或者1 来表示。字符类型定义为 tinyint
3、表示时间的字段
mysql支持的时间类型有:
DATETIME、 TIMESTAMP、DATE、TIME、YEAR。
DATETIME :
用于表示 年-月-日 时-分-秒 是 DATA 和 TIME的组合,表示的时间范围比较长,从1001年到9999年。占用空间最大为8个字节。
TIMESTAMP
用于表示 年-月-日 时-分-秒 ,但是表示的范围比较小,从1970年到2038年,占用空间为4个字节,并且表示值和时区相关,DATATIME和时区是无关的。插入时间时,会转成本地时区时间再存放。查询时间的时候,也会转成本地时区再显示,所以不同时区的人看到的结果是不一样的。如果插入的数据中没有给定时期,那么会默认往数据库中插入当前时间,CURRENT_TIMESTAMP.
如果系统在不同时区使用,一般设定为TIMESTAMP的格式。
createtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP .
- 【MySQL】MySQL的数据类型
- MYSQL的数据类型
- MySql的数据类型
- mysql的数据类型
- MySQL的一些数据类型
- 数据类型的问题(mysql)
- MySQL支持的数据类型
- MySQL的数据类型
- MySQL的数据类型
- mysql的数据类型 (转)
- mysql 的基本数据类型
- Mysql的基本数据类型
- mysql的数据类型
- mysql的BLOB数据类型
- 常用的MySQL数据类型
- MySQL 的数值数据类型
- mysql常见的数据类型
- 常用的MySQL数据类型
- Linux下的后台程序以及开机自启动
- 一位资深程序员大牛给予Java学习者的学习路线建议
- 构造函数初始化表的使用规则
- ListView和ScrollView 回到顶部
- Android动画(四):RevealEffect
- MySql的数据类型
- 打印时判断是否同一个控件
- Ubuntu 16.04主题美化
- java反射
- RadioGroup+ViewPager制作的底部导航栏
- 随笔 - 2017/2/16 - 23:40
- 拼接最小字典序练习
- 通过 GCC 学习 OpenMP 框架
- 并查集向量偏移