在说MySQL数据类型之前,先说明一个重要的点:
MySQL中的SQL语句是不区分大小写的,比如查询关键字:SELECT和select都是可以的;
但是表名和数据库名是严格区分大小写的,变量名也是严格区分大小写的
1、命名规范
(1)库名、表名、字段名必须使用小写字母,并采用下划线分割
a)MySQL有配置参数lower_case_table_names,不可动态更改,Linux系统默认为0,即库表名以实际情况存储,大小写敏感;
如果是1,以小写存储,大小写不敏感;
如果是2,以实际情况存储,但以小写比较。
b)如果大小写混合使用,可能存在abc、Abc、ABC等多个表共存,容易导致混乱;
c)字段名显示区分大小写,但实际使⽤用不区分,即不可以建立两个名字一样但大小写不一样的字段;
d)为了统一规范, 库名、表名、字段名使用小写字母。
(2)库名、表名、字段名禁止超过32个字符
库名、表名、字段名支持最多64个字符,但为了统一规范、易于辨识以及减少传输量,禁止超过32个字符
(3)库名、表名、字段名禁止使用MySQL保留字
当库名、表名、字段名等属性含有保留字时,SQL语句必须用反引号引用属性名称,这将使得SQL语句书写、SHELL脚本中变量的转义等变得⾮非常复杂
2、数值类型
(1)MySQL支持所有标准的SQL数值数据类型,这些类型包括严格数值数据类型(integer、smallint、decimal和numeric),以及近似数值数据类型(float、real、double precision);
(2)关键字int是integer的同义词,关键字dec是decimal的同义词;
(3)bit数据类型保存字段值,并且支持MyISAM、MEMORY、InnoDB、BDB表;
(4)作为SQL标准的扩展,MySQL也支持证书类型tinyint、mediumint、bigint。
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
tinyint |
1byte |
(-128,127) |
(0,255) |
小整数值 |
smallint |
2bytes |
(-32768,32767) |
(0,65535) |
大整数值 |
mediumint |
3bytes |
(-8388 608,8388 607) |
(0,16777215) |
大整数值 |
int或integer |
4bytes |
(-2147483648,2147483 647) |
(0,4294967295) |
大整数值 |
bigint |
8bytes |
(-9223372036854775808,9 223372036854775807) |
(0,18446744073 709551615) |
极大整数值 |
float |
4bytes |
(-3.402823466E+38,-1.175494 351E-38),0,(1.175494351 E-38,3.402823466351E+38) |
0,(1.175494351 E-38,3.402823 466 E+38) |
浮点数值 |
double |
8bytes |
(-1.7976931348623157E+308, -2.2250738585072014 E-308),0,(2.2250738585072014 E-308,1.7976931348623157 E+308) |
0,(2.225073858 5072014E-308, 1.797693134862 3157 E+308) |
浮点数值 |
decimal |
decimal(M,D),如果M>D,为M+2; 否则为D+2 |
依赖于M和D的值 |
依赖于M 和D的值 |
小数值 |
3、日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR;
每个时间类型又一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时,则使用“零”值。
类型 | 大小(bytes) | 范围 | 格式 | 用途 |
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/ 9999-12-31 23:59:59 |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第2147483647秒,北京时间2038-1-19 11:14:07,格林尼治时间2038年1月19日凌晨03:14:07 |
YYYYMMDD HHMMSS |
混合日期和时间值 |
3、字符串类型
字符串类型主要指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SE
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |