1 中文乱码
最早编码ASCII,对英文字符以及符号进行编码,128个(0->127);
MySQL默认使用Latin-1:总共256个,向下兼容ASCII,对欧洲符号进行编码(希腊字母等);
中国编码形式:
GB2312:对大约6000个简体中文进行编码;
Big5:只支持繁体中文(台湾);
GBK:在G2312基础上加入繁体中文进行编码,大概两万多字符;
Unicode:对世界上主要语言的字符进行编码,不兼容以上三种编码形式;可分为UTF-8,UTF-16,UTF-32
解决中文乱码方法:(三个步骤都需要,执行脚本文件中文为乱码,交互模式正常)
1.创建utf-8编码存储形式的数据库:create database my_test charset utf8;
2.设置客户端连接服务器使用UTF-8编码形式:set names utf8;
3.脚本.sql文件另存为utf-8编码
2 列类型
2.1 概述
2.2 数值类型
多种数值类型:节省存储空间的同时保证能存储下足够大的数值
- 整型
1)TINYINT:微整型 1字节 -128~127
2)SMALLINT: 小整型 2字节 -32768~32767
3)INT:整型 4字节 -2147483648~2147483647
4)BIGINT:大整型 8字节 - 浮点型(M表示总有效位数,N表示小数点后有效位数)
1)float:单精度浮点数,4字节,3.4E38,范围比INT大得多,精度不如INT,可能产生误差
2)double:双精度浮点数,8字节,1.79E308,范围比BIGINT大得多,精度不如BIGINT,可能产生误差;
3)decimal(M,N):严格定点数,保存精确小数,不会产生计算误差;
float与double牺牲部分小数空间,将浮点右移,换取空间存储数的幂,极大扩展数值范围,常用于天文运算 - 布尔类型
BOOLEAN/BOOL,取值TRUE或FALSE(1/0),等价于长度为1整型数字TINYINT(1);BOOL类型加引号全部显示为0 - 字符串类型
1)char(M):固定长度字符串,最大长度为255个字符;用空格填满空位,产生空间浪费;比varchar执行速度快;
2)varchar(M):长度可变字符串,最大长度65535个字符,存储空间较大;内容是可变长度,不会产生空间浪费,当数据长度<M,空间分配后还需在数据后加上一个空格;比char操作速度慢;
3)text(M):长度可变字符串,最大长度可以到2的32次方,即2G个字符 - 日期时间类型(用单引号或双引号括起来)
1)date:日期,‘2018-10-31’
2)time:时间,‘18:50:50’
3)datetime:日期时间, ‘2018-10-31 18:50:50’;不同系统表示范围不一样,地区默认日期格式也可能不同;函数补充:year()/month()/day()
3 列约束
Constraint,表中特定列上出现所有数据必须满足特定内容要求,插入数据需满足要求才能成功插入
- 主键约束
PRIMARY KEY,主键列的值不能为空且必须唯一(升序->加快查找速度,一个表唯一主键列)
自动增长auto_increment - 唯一约束
unique 指定列不能出现重复值,可以出现多个NULL - 非空约束
not null 指定列不能为NULL - 检查约束(MySQL不支持,因为会影响记录插入和更新的操作效率)
check 指定列上的值不能为NULL;Eg. sex char(1) CHECK(sex=‘男’ OR sex=‘女’) - 外键约束
foreign key 外间列上的值必须在参考表的主键列上,允许出现重复值和空值
foreign key(dep)外键列 references dept(id)指定表的主键列id - 默认值约束
default 未明确指定值时使用的默认值;Eg. default 0;default ‘等待付款’