MySQL 数据类型
1、整数类型
TINYINT 8位
SMALLINT 16位
MEDIUMINT 24位 -2的n-1次方到2的n-1次方减1(n是位数)
INT 32位
BIGINT 64位
2、实数类型
实数是带有小数部分的数字。
FLOAT(m,d)类型 32位 表示单精度浮点数值,m总个数,d小数位
DOUBL(m,d)E类型 64位 表示双精度浮点数值,m总个数,d小数位
DECIMAL(m,d)类型 m是数字的最大值(精度),它的范围是1到65,d是小数点右边的位数(比例),它的范围是0到30,必须不大于M。
DECIMAL类型一般用于精度要求非常高的计算(DECIMAL(7,3)规定了存储的值不会超过7位数字,并且小数点后不超过 3 位)
注意:MySQL可以为整数、实数类型指定宽度,例如INT(11),对大多数应用这是没有意义的,
它不会限制值的合法范围,只是规定了Mysql的一些交互工具(例如MySQL的命令行的客户端)用来显示字符的个数。
对于存储的计算来说,INT(1)和INT(20)是相同的。
整数、实数类型有可选的Unsigned属性,表示不允许负值,可使正数上限提高一倍。
整数、实数类型有可选的Zero Fill属性,表示如果数值宽度小于设定的宽度,则自动填充0,注意这只是最后显示的结果,在MySQL中实际存储的不变。
3、字符串类型
char 用于定长的字符串。会删除所有的末尾空格。
varchar 用于存储可变长字符串。例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都是使用定长存储,浪费空间。
若MySQL引擎是InnoDB,它会把过长的VARCHAR存储为BLOB。
由于是可变长的,在UPDATE时,可能使行变的更长,这回导致额外的工作开销。
使用场景,当字符串列的最大长度比平均长度大很多。
BINARY、VARBINARY存储的二进制字符串。
TEXT 不能指定默认值,创建索引要指定前多少个字符。
BLOB、TEXT分别采用二进制和字符方式存储。BLOB存储的是二进制数据,没有排序规则或字符集,TEXT类型有字符集和排序规则。
ENUM是一个字符串对象,它的值在创建时就规定了比如
create table enum_test(
id int
e enum('fish','apple','dog') not null,
);
insert into enum_test(e,id) value('fish',1);#成功
insert into enum_test(e,id) value('dog',2);#成功
insert into enum_test(e,id) value('apple',3);#成功
insert into enum_test(e,id) value('fish1',4);#失败,因为fish1没在enum('fish','apple','dog') 里
4、日期和时间类型
DATE 2017-01-01
TIME 12:01:59
DATETIME 2017-01-01 12:01:59
TIMESTAMP 自动修改时间(显示值依赖于时区)
5、位数据类型
BIT、SET慎用
6、数据类型的属性
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值(设置字段默认值)
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,适用于整数类型
UNSIGNED 无符号(比如,int正负之分)
CHARACTER SET name 指定一个字符集
7、MySQL区分大小写问题
1、mysql默认情况下是否区分大小写,使用
show Variables like '%table_names'; #查看lower_case_table_names的值,0代表区分,1代表不区分。
2、mysql对于类型为varchar数据,字段名的命名,表名默认不区分大小写,
但如果该字段以"*_bin"编码的话会使mysql对其区分大小写。