MYSQL之字符问题探究

今天的内容比较少,以后有时间再去补充

PS:已经补充了安装过程中最坑爹的字符问题的解决办法

MYSQL 列(字段),除字段名那行外,每一行称为记录

模型是现实中事物特征 和事物行为 的抽象,

模型分为:数学模型描述模型图像模型

数据建模:事物特征的抽象,例子:数据库设计

业务建模:事物行为的抽象,例子:程序设计

E-R图(实体-关系图)

实体、关系、属性

基数、元(关联实体的个数)和关联

主键:表的唯一标识,一般是一个字段
复合主键:表中多个字段的集合

外键: A表内字段a对应另一个表的主键b,则字段a称为A的外键

函数依赖: 字段a唯一确定字段b,则字段b函数依赖于字段a。

第一范式(1NF): 满足数据库基本要求,不冲突

第二范式(2NF): 基于第一范式,每个“非关键字”字段仅仅函数依赖于主键(主键是一个字段一般都满足2NF)
第三范式(3NF): 不存在“非关键字”字段函数依赖于任何其他“非关键字”字段。

未完待续。。。

补充


概念模型到逻辑模型(数据库设计人员要做的事情),逻辑模型到物理模型(DBMS要做的事情)
信息世界的基本概念:实体、属性、码、域、实体型、实体集、联系

图形表示:
实体用矩形、属性用椭圆、联系用菱形

关系模型概念
关系二维表
元组一行
属性一列
主码唯一确定的一个元组
属性取值范围
分组元组中一属性值

数据独立性:逻辑独立性、物理独立性

码:

候选码:属性唯一标识一个元组
主码:多个候选码中的一个
全码:所有属性组共同组成的候选码

五种基本操作:

选择、投影、并、差、笛卡儿积

R(关系名)、U(组成该关系的属性名集合)、D(属性域)、DOM(映像集合)、F(属性间数据依赖关系集合)

常见的定义约束条件: 主键约束、外键约束、唯一性约束、非空约束、检查约束、(Mysql暂不支持)、默认值约束

MYSQL的基础知识

MYSQL :单进程多线程、支持多用户、基于C/S

MYSQL使用流程:

一、操作系统启动MYSQL服务

二、MYSQL启动期间,将MYSQL配置文件中的参数信息读入MYSQL服务器内存

三、根据MYSQL配置文件的参数信息或者编译MYSQL时参数的默认值生成一个MYSQK服务实例进程

四、MYSQL服务实例进程派生出多个线程为多个MYSQL客户机提供服务

五、数据库用户访问MYSQL服务器的数据时,首先需要登陆一台主机,然后在主机上开启MYSQL客户机,输入账号密码,建立一条MYSQL客户机域服务器之间的“通信链路”

六、接着数据库用户就可以在MySQL客户机上书写MySQL命令或者语句,这些将会通过通信链路传送给MySQL服务实例,此过程称为Mysql客户机向MySQL服务器发送请求

七、MySQL服务实例负责解析这些命令和语句,并计划执行,然后将结果返回给MYsql客户机,此过程称为MYsQL服务器向MYSQL客户机返回响应。

八、数据库用户关闭MySQL客户机,通信链路断开,该客户机对应的会话结束
注意: 因为MYSQL是单进程多线程的,所以一台主机可以开启多个MYSQL客户机,进行多个MYSQL会话(session)

MYSQL服务: 是保存在MySQL服务器硬盘上的一个服务软件,实际上是静态的代码集合

MYSQL服务实例: 是一个正在运行的MySQL服务,其实质是一个进程,只有处于运行状态的服务实例才可以响应MySQL客户机的请求

MySQL服务器 : 一台硬件设备

MYSQL的InnoDB存储引擎(支持事务处理):主要面向在线事务处理(OLTP),例如:银行转账等服务

MYSQL的MyISAM存储引擎(以高速著称):主要面向在线分析处理(OLAP),例如天气查询等

MYSQL的字符集和字符序

字符集:。。。
字符序:在同一字符集中字符之间的比较规则。以ci结尾的大小写不敏感,以cs结尾的大小写敏感,以bin结尾的表示字符集按二进制编码值比较。

MySQL默认使用Latin1字符集,使用show character set; 可查看支持的字符集

这里写图片描述

使用 show variables like ‘character%’; 可查看当前会话使用的字符集

这里写图片描述

MySQL字符集的转换过程

这里写图片描述

一、在命令提示符窗口输入MySQL命令或SQL语句,回车后,由命令提示符窗口转换为character_set_client定义的字符集

二、使用命令提示符窗口连接成功MySQL服务器后,进入数据通信链路由character_set_client定义的字符集转换为character_set_connection定义的字符集

三、MySQL服务实例将character_set_connection定义的字符集转换为 character_set_server定义的字符集

四、若MySQL语句针对的是某个数据库进行操作,则此时将 character_set_server定义的字符集转换为 character_set_database
定义的字符集

五、MySQL语句执行结束后,将执行结果设置为character_set_results定义的字符集,

六、执行结果沿着已打开的数据通信链路原路返回,依次是 character_set_connection、character_set_client、命令提示符窗口。

注意: my.ini 配置文件中的

[mysql]
/* 设置mysql客户端默认字符集,包括character_set_connection、character_set_client、character_set_results */

default-character-set=utf8
[mysqld]
# character_set_server
character-set-server=utf8

MySQL字符集的设置
大家都知道,MySQL默认的字符集是Latin1,我就是坑爹的这个,所以一般有以下几种办法改变字符集
方法一

修改my.ini 中的配置文件,具体请看我的前一篇文章中的设置5.7.20版MYSQL从安装到坑爹,但是本人是不建议的,因为5.7.20版本似乎总是出现一些小小的error,所以这种设置暂且不用理会

方法二

使用临时的修改,通过MySQL命令行去修改,只能够确保当前会话修改成功,重启后又会失效

实战:
查看字符集

这里写图片描述

查看字符序

这里写图片描述

本人的比较坑爹,于是采用临时办法修改字符集,成功。

这里写图片描述

临时修改字符序,成功。

这里写图片描述

重点来了。。。

这个临时办法真好,省去了修改my.ini 导致崩溃的麻烦,但是,麻烦又来了,总不可能次次都手打一遍去设置吧,这多麻烦啊,嘿嘿,就是这么麻烦,但是谁叫砸是挨踢一族呢,用机器代替执行呀,学习MySQL 不就是学习它的使用方法吗,那么办法来了。

敲黑板了!

将上述设置语句保存在SQL脚本里面不久完事了吗,多好的法子啊,只要每次开启MySQL时记得执行一遍脚本不就OK了吗,这可真是个临时的永久办法。

实战:
将下面的内容保存在 init.sql 中,我的路径是放在E:\MYSQL\init.sql(自己的字符集和字符序看着加即可,都是这么改的)

#字符序临时设置办法 
set collation_database =gbk_chinese_ci;
set collation_server =gbk_chinese_ci;
show variables like 'collation%';

#字符集临时设置办法
set character_set_database =gbk;
 set character_set_server=gbk;
show variables like 'character%';

然后在MySQL命令行中执行 ,记住千万不要加; 这里没有;哦

 \. E:\MYSQL\init.sql

或者

 source E:\MYSQL\init.sql

这里写图片描述

完美解决!

重启MySQL,再来一遍

这里写图片描述

完美!

小结

个人感觉MySQL是十分的有趣的,真是太会折腾人了,不过这也是一个好事,可玩性极度飙升,可还行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值