文章目录
MySQL——MySQL5.7在Linux下的使用
1、Linux中修改MySQL的字符集为 utf-8
1、进入MySQL的配置文件
vim /etc/my.cnf
2、在 [mysqld] 下面 添加:
character_set_server=utf8mb4
3、改完后重启MySQL服务:
systemctl restart mysqld.service
4、查看MySQL的字符集设置
show variables like 'character%';

5、字符集修改成功
2、各级别字符集介绍
MySQL 4个级别的字符集:参考上图
- 服务器级别字符集 character_set_server
- 数据库级别字符集 character_set_database
- 表级别
- 列级别
查看服务器的字符集:
show variables like '%_server';
查看数据库的字符集和比较规则:
show variables like '%_database';
查看某个数据库的字符集:
show create database testdb1;
修改具体数据库的字符集(之前数据库已经创建的表的字符集不会变):
-- utf8_general_ci 比较规则
alter database testdb1 default character set 'utf-8' collate 'utf8_general_ci'
查看表的字符集:
show create table test1;
查看表的比较规则:
show table status from testdb1 like 'test1';
修改表的字符集和比较规则:
alter table test1 default character set 'utf8' collate 'utf8_general_ci';
3、MySQL在linux上的大小写规范
在Windows系统上,SQL大小写是不敏感的,但是在Linux系统上,对SQL的大小写是敏感度。
查看大小写敏感
在windows下查看:

参数 lower_case_table_names 为1,对大小写不敏感
在linux下查看:

参数 lower_case_table_names 为0,对大小写比较敏感
Mac OS X下参数 lower_case_table_names 默认值是 2 ,创建的表和DB依据语句上格式存放,凡是查找都是转换为小写进行。。
lower_case_table_names 参数详细介绍:
| 参数值 | 解释 |
|---|---|
| 0 | 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如windows或Mac OS x上我们不能将该参数设为0,如果在大小写不敏感的文件系统上将–lowercase-table-names强制设为0,并且使用不同的大小写访问MyISAM表名,可能会导致索引破坏。 |
| 1 | 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。 |
| 2 | 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb表名用小写保存。 |
4、合理设置sql_mode
sql_mode 会影响MySQL支持的SQL语法以及它执行的数据验证检查。通过设置 sql_mode 可以完成不同严格程度的数据校验,有效地保障数据准确性。
sql_mode定义了MySQL应该支持的sql语法,对数据的校验规则等。
查看当前MySQL的sql_mode值
select @@GLOBAL.sql_mode;
-- 或
select @@SESSION.sql_mode

常用的 sql_mode :根据下表可以看出MySQL5.7默认的 sql_mode 模式就很严格
| sql_mode 值 | 说明 |
|---|---|
| ONLY_FULL_GROUP_BY | 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 |
| NO_AUTO_VALUE_ON_ZERO | 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。 |
| STRICT_TRANS_TABLES | 如果一个值不能插入到一个事务中,则中断当前的操作,对非事务表不做限制 |
| NO_ZERO_IN_DATE | 不允许日期和月份为零 |
| NO_ZERO_DATE | mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告 |
| ERROR_FOR_DIVISION_BY_ZERO | 在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL |
| NO_AUTO_CREATE_USER | 禁止GRANT创建密码为空的用户 |
| NO_ENGINE_SUBSTITUTION | 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常 |
| PIPES_AS_CONCAT | 将“||” 视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数Concat相类似 |
| ANSI_QUOTES | 不能用双引号来引用字符串,因为它被解释为识别符 |
设置sql_mode
临时设置:设置当前窗口的sql_mode 为 STRICT_TRANS_TABLES
-- 全局设置
set global sql_mode = 'STRICT_TRANS_TABLES'
-- 当前会话
set session sql_mode = 'STRICT_TRANS_TABLES'
永久设置方式:
在 /etc/my.cnf 文件的 [mysqld] 下新增:
sql_mode=STRICT_TRANS_TABLES,ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO
然后重启MySQL服务。
5、MySQL目录路径
查询MySQL数据目录存放路径
MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件,之后在运行过程中产生的数据也都会存储到这个目录下的某些文件中,这个目录就称为数据目录。
show variables like 'datadir';

配置文件路径
配置文件路径:/etc/my.cnf
6、MySQL默认的数据库
有四个数据库是属于MySQL自带的系统数据库。

| 数据库名称 | 描述 |
|---|---|
| mysql | 主要存储系统用户的权限信息,一些存储过程、时间的定义信息,一些运行过程中产生的日志信息,一些帮助信息及时区信息等。 |
| information_schema | 主要存储系统中的一些数据库对象信息,如用户表信息,列信息,权限信息,字符集信息,分区信息、视图信息、触发器信息等等。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称为元数据。 |
| performance_schema | 主要存储数据库服务器性能参数,可以用来监控MySQL服务的各类性能指标。 |
| sys | 这个数据库主要是通过视图的形式把information_schema和performance_schema结合起来,帮助系统管理员和开发人员监控MySQL的技术性能。 |
本文详细介绍了如何在Linux系统中配置MySQL5.7,包括修改字符集为utf-8,解析各级别字符集作用,探讨大小写规范,设置sql_mode以确保数据准确,以及查询MySQL的目录路径。此外,还列举了MySQL的默认系统数据库,如mysql、information_schema、performance_schema和sys,这些数据库对于系统管理和性能监控至关重要。
431

被折叠的 条评论
为什么被折叠?



