MySQL学习笔记(二)MySQL数据类型
一、创建数据库:
create database 数据库名 default charset=utf8; //创建数据库并指定默认编码
二、创建表
create table 表名(
c1 数据类型(M) [unsigned not null zerofill default .....],
c2 ........,
....
)engine=存储引擎 default charset=字符集;
三、MySQL的数据类型:
1. 查看MySQL支持的数据类型:
mysql> ? data types;
2. MySQL8+支持的数据类型如下表:
1)数值类型:
类型 | 字节大小(bytes) | 范围(有符号) | 范围无符号 | 用途说明 |
---|---|---|---|---|
tinyint(M) | 1 | -128 ~ 127 | 0 ~ 255 | 非常小的整数类型 |
smallint(M) | 2 | -32768 ~ 32767 | 0 ~ 65535 | 非常小的整数类型 |
mediumint(M) | 3 | -8388608~8388607 | 0 ~ 16777215 | 中型整数 |
int(M) | 4 | -2147483648~2147483647 | 0 ~ 4294967295 | 普通大型整数 |
bigint(M) | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 | 大型整数 |
decimal(M[,D]) | 与M和D的值有关,M>D时为:M+2,否则为:D+2 | 精确的数值类型,M精确值,最大65,D小数位,最大30 | ||
float(M,D) | 4 | -3.402823466E+38 ~ -1.175494351E-38, 0, 1.175494351E-38 ~ 3.402823466351E+38 |
0, 1.175 494 351 E-38 ~ 3.402 823 466 E+38 |
单精度浮点数 |
double(M,D) | 8 | -1.7976931348623157E+308 ~ -2.2250738585072014E-308, 0, 2.2250738585072014E-308 ~ 1.7976931348623157E+308 |
0, 2.2250738585072014E-308 ~ 1.7976931348623157E+308 |
双精度浮点数 |
说明:
1. 数值型一旦确定了类型,其所占的字节大小就是固定的了,也就是说,该字段所能存储的数值大小就是与括号内的M值无关,tinyint(1)和tinyint(4)能储存的数值大小是一样的,M代表的是显示宽度,也即是当设定了zerofill属性时,tinyint(1)显示的就是1,而tinyint(4)显示的是0001。
2. bit(M):bit-value类型,M表示每个值的位数,M的值为:1 ~ 64,默认是:1。
3. bool,boolean:布尔类型,1为真,0为假,值true和false分别是1和0的别名。
2)日期和时间类型:
类型 | 字节长度(bytes) | 范围 | 格式 | 用途说明 |
---|---|---|---|---|
date | 3 | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 日期值 |
datetime | 8 | 1000-01-01 00:00:00/9999 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 日期和时间值 |
timestamp | 4 | 1970-01-01 00:00:01.000000 ~ 结束时间是第 2147483647 秒, 北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
YYYYMMDD HHMMSS | 日期和时间值,时间戳 |
time | 3 | -838:59:59.000000 ~ 838:59:59.000000 | HH:MM:SS | 时间值或持续时间 |
year | 1 | 1901 ~ 2155 | YYYY | 年份值 |
3)字符串类型 | ||||
类型 | 字节长度(bytes) | 用途说明 | ||
---- | ---- | ---- | ||
char(M) | 0 ~ 255 | 定长字符串 | ||
varchar(M) | 0 ~ 65535 | 变长字符串 | ||
tinyblob | 0 ~ 255 | 不超过 255 个字符的二进制字符串 | ||
tinytext(M) | 0 ~ 255 | 短文本字符串 | ||
blob | 0 ~ 65535 | 二进制形式的长文本数据 | ||
text(M) | 0 ~ 65535 | 长文本数据 | ||
mediumblob | 0 ~ 16777215 | 二进制形式的中等长度文本数据 | ||
mediumtext(M) | 0 ~ 16777215 | 中等长度文本数据 | ||
longblob | 0 ~ 4294967295 | 二进制形式的极大文本数据 | ||
longtext(M) | 0 ~ 4294967295 | 极大文本数据 |
说明:
1. 对于char(M)、varchar(M)、text(M)字符串类型,M表示所能存储的最大字符数,在MySQL严格模式下,若insert的值超出M的大小将报数据过长的错误。
2. BLOB值被视为二进制字符串,对于BLOB(M)类型,M表示所能存储的最大字节数。
3. enum类型:枚举类型,MySQL为枚举列值列表分配索引(指枚举值列表中的位置,它与表索引无关),索引从1开始,实际存储的是索引,使用where查询时可以使用枚举列值列表中的值查询也可以使用索引查询。null值的索引是null,空字符串或错误的字符串值的索引为0。在MySQL严格模式下,insert超出枚举列表值的值会报错。一个枚举列最多可以包含65535个不同的元素。若将数字存储在枚举列中,则该数字将被视为可能值的索引,并且存储的值是具有该索引的枚举成员,这很容易造成混淆。枚举值不能是表达式,即使是求值为字符串值的表达式,也不能使用用户变量作为枚举值。
4. set类型:
a)SET是可以具有零个或多个值的字符串对象,每个值都必须从创建表时指定的允许值列表中选择;
b)一个SET列最多可包含64个不同的成员;
c)定义中的重复值会导致警告,如果启用了严格的SQL模式,则会导致错误;
d)如果启用了严格的SQL模式,则尝试插入无效 SET值将导致错误;
e)SET值按数字排序, NULL值在非NULL SET值之前排序。