MySQL中的编码和数据类型:字符集、校对集、MySQL数据类型、MySQL运算符

一.字符集

1.概念

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。

2.常见字符集

ASCII: 基于罗马字母表的⼀套字符集, 它采用1个字节的低7位表示字符, 高位始终为0。
LATIN1: 相对于ASCII字符集做了扩展, 仍然使用⼀个字节表示字符, 但启用了高位,扩展了字符集的表示范围。
GB2312: 简体中文字符, ⼀个汉字最多占用2个字节
GB: 只是所有的中文字符, ⼀个汉字最多占用2个字节
UTF8: 国际通用编码, ⼀个汉字最多占用3个字节
UTF8MB4: 国际通用编码, 在utf8的基础上加强了对新文字识别, ⼀个汉字最多占用4个字节

gbk字符集最大字符串长度: 65535/2 -1 --> varchar(32766)
utf8字符集最大字符串长度: 65535/3 -1 --> varchar(21844)
utf8mb4字符集最大字符串长度: 65535/4 -1 --> varchar(16382)

3.使用场景

(1)保存数据的时候需要使用字符集
(2)数据传输的时候也需要使用字符集
(3)在存续的时候使用字符集
     在MySQL的服务器上,在数据库中,在表的使用上,在字段的设置上。
     在服务器安装的时候,可以指定默认的字符集。

4.查看当前mysql系统支持的字符集

show variables like 'character_%';

在这里插入图片描述

character_set_client:客户端来源数据使⽤的字符集
character_set_connection:连接层字符集
character_set_database:当前选中的数据库的默认字符集
character_set_filesystem:文件系统字符集
character_set_results:查询结果使用的字符集
character_set_server:默认的内部操作字符集
character_set_system:系统元数据(字段名、表名等)的字符集

5.修改当前的MySQL系统的字符集编码

(1)全部修改

set names gbk;

(2)指定修改

set character_set_client = utf8mb4;
set character_set_results = utf8mb4;

在这里插入图片描述
备注:它是临时性命令, mysql链接断开以后, 再次连接时会恢复原状

二.校对集

在某一种字符集下,为了使字符之间可以互相比较,让字符和字符形成一种关系的集合,称之为校对集。

⽐如说 ASCII 中的 a 和 B, 如果区分大小写 a > B,如果不区分 a < B;

不同字符集有不同的校对规则,命名约定:以其相关的字符集名开始,通常包括⼀个语言名,并且以 _ci、_cs 或 _bin 结束。
  _ci : 大小写不敏感
  _cs : 大小写敏感
  _bin : binary collation 二元法,直接比较字符的编码,可以认为是区分大小写的,因为字符集中’A’和’a’的编码显然不同。

/* 数据库默认的排序⽅式,是升序 */
create table t1(
    str char(1)
) charset=utf8mb4 collate=utf8mb4_general_ci; -- 后缀边是_ci的都是不区分⼤⼩写的


create table t2(
    str char(1)
) charset=utf8mb4 collate=utf8mb4_bin; -- 后缀边是_bin的都是区分⼤⼩写的

Linux中MySQL是区分大小的,如果想要改变,需要自己去配置。

#找到my.cnf
vim /etc/mysql/my.cnf

#找到[mysqld]进行配置,其中1是不区分大小写,0是区分大小写
lower_case_table_names=1
# 查看字符集和校对集
show character set;

# 显示所有的校对集
show collation;

在这里插入图片描述
在这里插入图片描述

三.MySQL的数据类型

1.整型

在这里插入图片描述
⼀个无符号数⼀定是非负数:

create table t3(
    age tinyint unsigned
);

在这里插入图片描述
显示宽度 (zerofill):
整型显示宽度, 位数不足时,用 0 填充
在这里插入图片描述

2.浮点型

在这里插入图片描述
定点数的位数更加长
使用方式:
    float(M,D)
    double(M,D)
    decimal(M,D)
    M 是支持多少个长度, D 是小数点后面的位数
在这里插入图片描述
当超过M时,会报错,同时float类型精度大约6位数字,超过会产生误差问题
在这里插入图片描述

3.字符串类型

在这里插入图片描述
CHAR 与 VARCHAR 类型的区别:
在这里插入图片描述
思考:字符串、浮点型等都可以随意指定大小, 那么是不是平时操作的时候随意指定⼀个就可以呢?
:不是, 数据类型并不是越大越好, 越大的类型会造成数据臃肿, 存储空间占用过大, 数据检索也会变慢。

4.时间类型

在这里插入图片描述
其中timestamp 时间戳类型,在显示方面和datetime是⼀样的, 在存储上不⼀样
其范围从 1970-1-1 0:0:0 到 2038-1-19 11:14:07,使用 4 个字节表示
该值大小与存储的位长有关: 2 ** (4 * 8 - 1)

可以使用now()函数来获取现在时间
在这里插入图片描述

5.枚举(enum)

多选⼀的时候使用的⼀种数据类型
在前端使用单选框的时候, 枚举类型可以发挥作用
枚举类型的优点:
       限制了可选值
       节省空间
       运行效率高
创建en表,给gender添加枚举数据类型:      
在这里插入图片描述
插入数据:
在这里插入图片描述
当我们插入性别不是male、female以及unknown时,会报错:
在这里插入图片描述
枚举类型的计数默认从1开始的:
在这里插入图片描述

6.集合(set)

SET最多可以有64个不同的成员。类似于复选框, 有多少可以选多少。
在这里插入图片描述

7.布尔型

MySQL中的bool类型也是1和0.

create table `bool`(
   cond boolean
);

insert into `bool` values(True),(False),(-1),(0.1);  --成功
insert into `bool` set cond='True';  --失败

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.列的属性

(1)primary key
主键⼀般是唯⼀的标识
特性:不能为空,也不能重复,⼀张表当中只可以拥有⼀个主键
正常的主键:

create table `test`( 
     id int primary key, 
     name varchar(32) 
);    

有时,我们需要建立联合主键:

 create table `test1`( 
     user_id int, 
     post_id int, 
     primary key(user_id,post_id) 
);        

有联合主键的表结构:
在这里插入图片描述
插入一些数据:
在这里插入图片描述
当再次插入相同组合数据时,会报错:
在这里插入图片描述

联合主键:就是指用2个或者是2个以上的字段组成的主键,用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且附加上了主键索引。
数据库主键:指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。

(2)auto_increment
自动增长的列,其默认从 1 开始,常配合主键使用

create table `test2`( 
     id int primary key auto_increment, 
     name varchar(32) 
);

插入一些数据,查询表,会发现id自增。
在这里插入图片描述
(3)插入的值是否可以为空
null:是可以为空,默认不写
not null:不可以为空,如果插入的时候,某个字段的值为空,则报错

create table `test3`( 
       id int primary key auto_increment, 
       name varchar(32) not null, 
       pwd varchar(16) null 
);

表结构:
在这里插入图片描述
(4)default
默认值⼀般是和null做搭配的

create table `test4`( 
       id int primary key auto_increment, 
       name varchar(32) default 'root' not null, 
       pwd varchar(16) default 123 
);  

表结构:
在这里插入图片描述
(5)unique
唯⼀键,保证列当中的每⼀个数据都不重复
例如:邮箱不可以重复,手机号不可以重复

create table `test5`( 
       id int primary key auto_increment, 
       tel char(11) unique 
);    

插入一些数据:

insert into test5 (tel)  values (12345678911),(98765432111);

如果再插入相同的数据,则会报错。
在这里插入图片描述
(6)comment
字段说明: 给开发者看的, ⼀般用来对相应字段进行说明

create table `test6`( 
       id int primary key auto_increment comment '这字段代表创建id', 
       name varchar(32) comment '这个字段代表创建名字' 
); 

在这里插入图片描述

9.SQl注释

(1)单行注释: – hello world
(2)多行注释: /* hello world */
(3)MySQL 独有的单行注释: # hello world

四.MySQL的运算符

1.算术运算符

select 1 + 2, 4 - 2, 2 * 6, 10 % 3, -234 / 2, 2 / 0; 

运行结果:
在这里插入图片描述

2.比较运算符

在这里插入图片描述
(1)常规比较:

select 1=2, 2<3, 3<=4, 4>5, 5>=3, 8!=9, 8<>9, 'abc' = 'Abc', 'z' > 'a'; 

运行结果:
在这里插入图片描述
(2)范围比较:

select 123 between 100 and 200, 'b' in ('a', 'b', 'c');

运行结果:
在这里插入图片描述
(3)null比较:

select 12 is null, 23 = null, null = null, null <=> null, null is null, 32 is not null;

运行结果:
在这里插入图片描述
(4)模糊比较(like):

select 'HelloWorld' like 'hello%'; 

运行结果:
在这里插入图片描述

3.逻辑运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
xor:相当于异或
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值