MySQL_常用配置


一、忽略大小写

1.1 查看大小写配置

mysql> show variables like '%lower_case_table_names%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 0     |
+------------------------+-------+
1 row in set (0.00 sec)

lower_case_table_names 参数的设置:

  • 0(默认值): 大小写敏感;
  • 1: 大小写不敏感。创建的表、数据库,都是以小写形式存放在磁盘上,对于sql语句都是转换成为小写对表和数据库进行查找;
  • 2: 创建的表、数据库,依据语句上格式存放,凡是查找都是转化为小写进行。

1.2 设置忽略大小写

$ vim /etc/my.cof
# 在 [mysqld] 加入
lower_case_table_names=1

1.3 设置大小写规则

当想要设置为大小写不敏感时, 要在 my.cnf 这个配置文件的 [mysqld] 中加入 lower_case_table_names=1, 然后重启服务。

但是,要在重启数据库实例前就需要将原来的数据库和表转换为小写,否则将找不到数据库名。

此参数适用于 MySQL5.7。在 MySQL8 下禁止在重新启动 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 服务。

二、字符集

在 MySQL8 之前,默认字符集为 latin1,utf 字符集指向的是 utfmb3。如果管理员忘记修改默认的字符集,就会出现乱码的问题。从 MySQL8 开始,数据库的默认编码改为了 utfbmb4, 从而避免乱码问题。

2.1 查看字符集

注意: 此处 MySQL5 和 MySQL8 都是通过 docker 安装, 版本如下: mysql:5.7mysql:8.0

-- mysql5.7
mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+-- mysql8
mysql> show variables like '%character%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+

在 MySQL5 中, character_set_servercharacter_set_database 都是 latin1,不支持中文,保存中文会报错

mysql> create database kinodb1;
Query OK, 1 row affected (0.00 sec)mysql> use kinodb1
Database changedmysql> create table test1(id int primary key auto_increment, name varchar(25));
Query OK, 0 rows affected (0.04 sec)mysql> insert into test1 values(0, '我爱中国');
[HY000][1366] Incorrect string value: '\xE6\x88\x91\xE7\x88\xB1...' for column 'name' at row 1-- 查看建表语句
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                  |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(25) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)-- 查看建库语句
mysql> show create database kinodb1;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| kinodb1  | CREATE DATABASE `kinodb1` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

2.2 修改字符集

$ vim /etc/my.cnf
[mysql]
default-character-set=utf8[client]
default-character-set=utf8[mysqld]
character_set_server=utf8-- 重启 MySQL
# 再次查看字符集(MySQL5)
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

此修改只会针对重启数据库后的后续新建操作生效,历史的误会变更。

2.3 修改已有库表的字符集

-- 修改已存在的数据库字符集
alter database kinodb1 character set 'utf8';-- 修改已存在的表字符集
alter table test1 convert to character set 'utf8';

原来的数据如果使用非 utf8 编码的话,数据本身编码不会发生改变。已有数据需要导出或者删除,然后重新插入。

2.4 utf8mb3 和 utf8mb4

  • utf8mb3: 阉割过的 utf8 字符集,只使用 1-3 个字节表示字符。
  • utf8mb4: 正宗的 utf8 字符集,使用 1-4 个字节表示字符。

三、最大连接数

$ vim /etc/my.cnf
[mysqld]
...
max_connections=1000# 查看最大连接数
show variables like '%max_connections%';# 查看当前连接数
show status like 'Threads%';

四、修改密码

SET PASSWORD FOR 'root'@'localhost'= "Kino123.";

五、强制修改密码

六、max_allowed_packet

max_allowed_packet 是指 mysql server 和 client 在一次传送数据包的过程中最大允许的数据包大小.

# 临时修改
set global max_allowed_packet = 64 * 1024 * 1024;# 永久修改
vim my.ini
[mysqld]
max_allowed_packet = 64M # 查询
show VARIABLES like '%max_allowed_packet%';

七、sql_mode

7.1 查看当前的 sql_mode

-- 三种方式都可以
mysql> select @@session.sql_mode;  
mysql> select @@global.sql_mode; 
mysql> show variables like 'sql_mode';
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@session.sql_mode                                                                                                                        |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

7.2 设置 sql_mode

7.2.1 临时设置: 当前窗口中设置 sql_mode

set global sql_mode = '...';  -- 全局
set session sql_mode = '...'; -- 当前会话-- 示例
-- 改为严格模式。在当前会话中生效,关闭当前会话就生效了
set session sql_mode = 'STRICT_TRANS_TABLES';-- 改为严格模式。在当前服务中生效,重启 MySQL 服务后就失效了
set global sql_mode = 'STRICT_TRANS_TABLES';

7.2.2 永久设置

修改 /etc/my.cnf 设置

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

7.3 宽松模式

如果设置的是宽松模式,那么在插入数据的时候,即便是给了一个错误的数据,也可以被接收,并且不报错。

-- 设置宽松模式
set session sql_mode = '';-- 创建表
create table test2(id int primary key auto_increment, name varchar(5));-- insert 记录
insert into test2 values(0, 'abcde123');-- 查询记录可以看见,name限制为5字符, insert8字符, 实际被截断了,过程中没有异常信息
select * from test2;
+----+-------+
| id | name  |
+----+-------+
|  1 | abcde |
+----+-------+
1 row in set (0.00 sec)

7.4 严格模式

MySQL5.7 版本就将 sql_mode 默认值改为了严格模式。

-- 设置严格模式
set session sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';-- insert 记录会报错
insert into test2 values(0, 'abcde123');
ERROR 1406 (22001): Data too long for column 'name' at row 1

7.5 sql_mode 取值

  1. ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么将认为这个SQL是不合法的,因为列不在GROUP BY从句中.
  2. STRICT_TRANS_TABLES: 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制
  3. NO_ZERO_IN_DATE: 在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入’0000-00-00’。在非严格模式,可以接受该日期,但会生成警告。
  4. NO_ZERO_DATE: 在严格模式,不要将 '0000-00-00’做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告。
  5. ERROR_FOR_DIVISION_BY_ZERO: 在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。
  6. NO_AUTO_CREATE_USER: 防止GRANT自动创建新用户,除非还指定了密码。
  7. NO_ENGINE_SUBSTITUTION: 如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常。
  8. ANSI: 宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
  9. TRADITIONAL: 严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事务时,会进行事务的回滚。
  10. STRICT_TRANS_TABLES: 严格模式,进行数据的严格校验,错误数据不能插入,报error错误。

八、修改默认引擎

-- 查看数据库默认引擎
mysql> show engines;-- 设置默认引擎(临时)
mysql> set default_storage_engine=InnoDB;-- 设置默认引擎(永久)
[mysqld]
default-storage-engine=InnoDB

九、命令行不能输入中文

## 在服务器输入
export LANG=en_US.UTF-8## 再次进入mysql, 即可输入中文
mysql -uroot -p

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端】[vue3] [uni-app] 组件样式击穿:deep

我是在开发uni-app时测试的思路,大家可以借鉴一下。 我这边测试的是uni组件,但是我觉得即便你用element-plus之类的,样式击穿的思路都相同。 我自定义了一个全局样式scss文件,并引入到了项目中。(如图) 利用vue3 中的 deep 方式…

为什么Transformer的编码器和解码器如此重要?一文带你读懂

Transformer 模型是一种基于自注意力(self-attention)机制的深度学习模型,最初是为了解决自然语言处理(NLP)中的序列到序列(sequence-to-sequence)任务而提出的,如机器翻译。Transfo…

人脸识别——可解释的人脸识别(XFR)人脸识别模型是根据什么来识别个人的

可解释性人脸识别(XFR)? 人脸识别有一个任务叫1:N(识别)。这个任务将一个人的照片与N张注册照片进行比较,找出相似度最高的人。 这项任务用于刑事调查和出入境点。在犯罪调查中,任务从监控摄像…

【论文笔记】Parameter-Effificient Transfer Learning for NLP

题目:Parameter-Effificient Transfer Learning for NLP 阅读 文章目录 0.摘要1.引言2 Adapter tuning for NLP3 实验3.1 参数/性能平衡3.2 讨论 4.相关工作 0.摘要 克服微调训练不高效的问题,增加一些adapter模块,思想就是固定原始的网络中的参数&…

.input只读,禁用,必填,提示词(占位符)属性分别是什么?

在HTML中&#xff0c;<input>元素有几个常用的属性&#xff0c;包括只读&#xff08;readonly&#xff09;、禁用&#xff08;disabled&#xff09;、必填&#xff08;required&#xff09;和提示词&#xff08;占位符&#xff0c;placeholder&#xff09;。以下是这些属…

mysql model_path longblob 类型文件操作

在 MySQL 中&#xff0c;如果你有一个表包含一个 LONG BLOB 类型的字段&#xff08;例如 model_path&#xff09;&#xff0c;你可以使用 SQL 查询来提取该字段中的二进制数据&#xff0c;并将其下载为文件。以下是一个完整的步骤来实现这个过程&#xff1a; 步骤1&#xff1a;…

开源低代码平台,JeecgBoot v3.7.0 里程碑版本发布

项目介绍 JeecgBoot是一款企业级的低代码平台&#xff01;前后端分离架构 SpringBoot2.x&#xff0c;SpringCloud&#xff0c;Ant Design&Vue3&#xff0c;Mybatis-plus&#xff0c;Shiro&#xff0c;JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

90V转12V1A恒压WT6039

90V转12V1A恒压WT6039 WT6039降压DC-DC转换器芯片专为处理宽泛的电压输入范围设计&#xff0c;支持从12V至90V。该芯片集成了关键功能&#xff0c;如使能控制开关、参考电源、误差放大器、过热保护、限流保护及短路保护等&#xff0c;以确保系统在各种操作条件下的安全与稳定性…

qt开发-05_QPushButton

按钮是最常用的控件&#xff1b; 如果找不到文件可以这样&#xff1a; 选择这个复制文件的路径&#xff0c;粘贴就可以了。 在qt中新建一个项目&#xff0c;并且打开ui界面添加一个按钮&#xff1b; 右键这个按钮可以有很多功能&#xff1a; 先是这个转到槽&#xff0c;这个就…

netcore 生成验证码

安装依赖 Install-Package Lazy.Captcha.Core 注册服务 builder.Services.AddCaptcha(); 自定义注册服务 // 注册服务的时候增加配置 services.AddCaptcha(Configuration, option > {option.CaptchaType CaptchaType.WORD; // 验证码类型option.CodeLength 6; // 验证…

六月惊喜| 事件分析Plus上线

前情回顾 ClkLog在四月先上线了一版<事件分析>&#xff0c;可以通过元数据的配置&#xff0c;创建并统计自定义事件的数据情况&#xff08;例如&#xff1a;用户数、触发次数、人均次数&#xff09;。 功能上线后好多小伙伴说希望我们加紧上线自定义的事件分析。ClkLog实…

【Java】已解决java.net.HttpRetryException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例 已解决java.net.HttpRetryException异常 在Java的网络编程中&#xff0c;尤其是使用Apache HttpClient或其他类似的HTTP客户端库时&#xff0c;可能会遇到java.net.HttpRetryException异常。这个…

动态IP与静态IP,如何选择更适合你的类型?

在当今数字化时代&#xff0c;互联网已成为我们日常生活和工作中不可或缺的一部分。而IP地址作为互联网通信的基础&#xff0c;扮演着至关重要的角色。在选择IP地址类型时&#xff0c;动态IP和静态IP是两种常见的选择。IPIDEA代理IP将为大家详细解析这两种IP的特点&#xff0c;…

【SPIE出版】第六届无线通信与智能电网国际会议(ICWCSG 2024,7月26-28)

随着科技的飞速发展和能源需求的日益增长&#xff0c;智能电网技术逐渐成为电力行业的重要发展方向。与此同时&#xff0c;无线通信技术在近年来也取得了显著的进步&#xff0c;为智能电网的发展提供了强有力的支持。为了进一步推动无线通信与智能电网的结合与发展&#xff0c;…

Linux基础 -- 用户态C++定时器的使用

Linux 中用户态C定时器的使用 在Linux中&#xff0c;timer_create函数可以使用不同的时钟选项来创建定时器。主要的时钟选项有以下几种&#xff1a; CLOCK_REALTIMECLOCK_MONOTONICCLOCK_PROCESS_CPUTIME_IDCLOCK_THREAD_CPUTIME_IDCLOCK_BOOTTIMECLOCK_REALTIME_ALARMCLOCK_…

2024最新最全【网络安全/渗透测试】面试题汇总

思路流程 信息收集漏洞挖掘漏洞利用&权限提升清除测试数据&输出报告复测 问题深信服一面:SQL注入防护为什么参数化查询可以防止sql注入SQL头注入点盲注是什么&#xff1f;怎么盲注&#xff1f;宽字节注入产生原理以及根本原因 产生原理在哪里编码根本原因解决办法sql里…

这才多久,ChatGPT-4o 又被碾压了?

大模型皇位易主&#xff1f; 昨天&#xff0c;OpenAI 的竞争对手 Anthropic 发布了其最强大的 AI 模型&#xff1a;Claude 3.5 Sonnet。 目前&#xff0c;Claude 3.5 Sonnet 已经在 Claude.ai 和 Claude iOS 应用程序上免费提供。 据 Anthropic 号称&#xff0c;Claude 3.5 Son…

全流程FVCOM水环境、污染物迁移、水交换、水质、潮流、温盐、波浪及泥沙数值模拟实践技术应用

FVCOM因其独特的优点&#xff0c;成为研究海洋动力过程、污染物扩散、水质变化等问题的重要工具。作为一种基于有限体积法的数值模型&#xff0c;以其精确的计算方法和强大的适应性&#xff0c;广泛应用于水环境、潮流、温盐、波浪、泥沙等多种过程的模拟。FVCOM采用非结构化网…

2005年上半年软件设计师【下午题】试题及答案

文章目录 2005年上半年软件设计师下午题--试题2005年上半年软件设计师下午题--答案2005年上半年软件设计师下午题–试题

Spring Boot 多线程例子

在Spring Boot中&#xff0c;多线程可以通过Java的并发工具来实现。以下是一些常见的多线程实现方法&#xff1a; 1. 使用Async注解和CompletableFuture&#xff1a; 首先&#xff0c;需要在Spring Boot应用的主类上添加EnableAsync注解&#xff0c;以启用异步支持。 java Spr…