文章目录
- 1. 基于docker安装mysql
- 2. 字符集的相关操作
- 2.1 修改MySQL5.7字符集
- 2.2 各级别的字符集
- 2.3 字符集与比较规则(了解)
- 2.4 请求到响应过程中字符集的变化
- 3. SQL大小写规范
- 3.1 Windows和Linux平台区别
- 3.2 Linux下大小写规则设置
- 3.3 SQL编写建议
- 4. sql_mode的合理设置
- 4.1 宽松模式 vs 严格模式
- 4.2 宽松模式再举例
- 4.3 模式查看和设置
1. 基于docker安装mysql
docker pull mysql:5.7.38
// 注意容器其中的文件夹内容会被外部文件夹内容覆盖掉
// 建议:
// 步骤1:先不挂载conf.d文件夹,先启动mysql容器,使得在容器里面生成my.cnf文件。
// 步骤2:然后拷贝my.cnf到主机上。
// 步骤3:然后挂载主机my.cnf到容器,并且启动容器,就可以了。
docker run -p 13306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d a3
2. 字符集的相关操作
2.1 修改MySQL5.7字符集
- 修改步骤
在MySQL 8.0版本之前,默认字符集为latin1
,utf8字符集指向的是utf8mb3
。网站开发人员在数据库设计的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL8.0开始,数据库的默认编码将改为utf8mb4
,从而避免上述乱码的问题。
操作1:查看默认使用的字符集
show variables like 'character%';
# 或者
show variables like '%char%';
-
MySQL8.0中执行:
-
MySQL5.7中执行:
MySQL 5.7 默认的客户端和服务器都用了 latin1 ,不支持中文,保存中文会报错。MySQL5.7截图如下:
在MySQL5.7中添加中文数据时,报错:
因为默认情况下,创建表使用的是 latin1
。如下:
操作2:修改字符集
vim /etc/my.cnf
在MySQL5.7或之前的版本中,在文件最后加上中文字符集配置:
character_set_server=utf8
操作3:重新启动MySQL服务
systemctl restart mysqld
但是原库、原表的设定不会发生变化,参数修改只对新建的数据库生效。
2.2 各级别的字符集
MySQL有4个级别的字符集和比较规则,分别是:
- 服务器级别
- 数据库级别
- 表级别
- 列级别
执行如下SQL语句:
show variables like 'character%';
- character_set_server:服务器级别的字符集
- character_set_database:当前数据库的字符集
- character_set_client:服务器解码请求时使用的字符集
- character_set_connection:服务器处理请求时会把请求字符串从character_set_client转为character_set_connection
- character_set_results:服务器向客户端返回数据时使用的字符集
2.3 字符集与比较规则(了解)
2.4 请求到响应过程中字符集的变化
3. SQL大小写规范
3.1 Windows和Linux平台区别
- 在 SQL 中,关键字和函数名是不用区分字母大小写的,比如 SELECT、WHERE、ORDER、GROUP BY 等关键字,以及 ABS、MOD、ROUND、MAX 等函数名。
- 不过在 SQL 中,你还是要确定大小写的规范,因为在 Linux 和 Windows 环境下,你可能会遇到不同的大小写问题。
windows系统默认大小写不敏感
,但是linux系统是大小写敏感的
。 - 通过如下命令查看:
SHOW VARIABLES LIKE '%lower_case_table_names%'
3.2 Linux下大小写规则设置
- 当想设置为大小写不敏感时,要在 my.cnf 这个配置文件 [mysqld] 中加入
lower_case_table_names=1
,然后重启服务器。 - 但是要在重启数据库实例之前就需要将原来的数据库和表转换为小写,否则将找不到数据库名。
- 此参数适用于MySQL5.7。在MySQL 8下禁止在重新启动 MySQL 服务时将
lower_case_table_names
设置成不同于初始化 MySQL 服务时设置的lower_case_table_names
值。如果非要将MySQL8设置为大小写不敏感,具体步骤为:
1、停止MySQL服务
2、删除数据目录,即删除 /var/lib/mysql 目录
3、在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1
4、启动MySQL服务