天天看点

MySQL_2.中文乱码、列1 中文乱码2 列类型3 列约束

中文乱码、列

  • 1 中文乱码
  • 2 列类型
      • 2.1 概述
      • 2.2 数值类型
  • 3 列约束

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. 整型

    1)TINYINT:微整型 1字节 -128~127

    2)SMALLINT: 小整型 2字节 -32768~32767

    3)INT:整型 4字节 -2147483648~2147483647

    4)BIGINT:大整型 8字节

  2. 浮点型(M表示总有效位数,N表示小数点后有效位数)

    1)float:单精度浮点数,4字节,3.4E38,范围比INT大得多,精度不如INT,可能产生误差

    2)double:双精度浮点数,8字节,1.79E308,范围比BIGINT大得多,精度不如BIGINT,可能产生误差;

    3)decimal(M,N):严格定点数,保存精确小数,不会产生计算误差;

    float与double牺牲部分小数空间,将浮点右移,换取空间存储数的幂,极大扩展数值范围,常用于天文运算

  3. 布尔类型

    BOOLEAN/BOOL,取值TRUE或FALSE(1/0),等价于长度为1整型数字TINYINT(1);BOOL类型加引号全部显示为0

  4. 字符串类型

    1)char(M):固定长度字符串,最大长度为255个字符;用空格填满空位,产生空间浪费;比varchar执行速度快;

    2)varchar(M):长度可变字符串,最大长度65535个字符,存储空间较大;内容是可变长度,不会产生空间浪费,当数据长度<M,空间分配后还需在数据后加上一个空格;比char操作速度慢;

    3)text(M):长度可变字符串,最大长度可以到2的32次方,即2G个字符

  5. 日期时间类型(用单引号或双引号括起来)

    1)date:日期,‘2018-10-31’

    2)time:时间,‘18:50:50’

    3)datetime:日期时间, ‘2018-10-31 18:50:50’;不同系统表示范围不一样,地区默认日期格式也可能不同;函数补充:year()/month()/day()

3 列约束

Constraint,表中特定列上出现所有数据必须满足特定内容要求,插入数据需满足要求才能成功插入

  1. 主键约束

    PRIMARY KEY,主键列的值不能为空且必须唯一(升序->加快查找速度,一个表唯一主键列)

    自动增长auto_increment

  2. 唯一约束

    unique 指定列不能出现重复值,可以出现多个NULL

  3. 非空约束

    not null 指定列不能为NULL

  4. 检查约束(MySQL不支持,因为会影响记录插入和更新的操作效率)

    check 指定列上的值不能为NULL;Eg. sex char(1) CHECK(sex=‘男’ OR sex=‘女’)

  5. 外键约束

    foreign key 外间列上的值必须在参考表的主键列上,允许出现重复值和空值

    foreign key(dep)外键列 references dept(id)指定表的主键列id

  6. 默认值约束

    default 未明确指定值时使用的默认值;Eg. default 0;default ‘等待付款’

继续阅读