MYSQL理解-运行配置

启动设置参数:

启动时命令

mysqld --skip-networking

mysqld --default-storage-engine=MyISAM

在启动时配置参数

my.cnf配置文件介绍:

my.cnf配置文件分组:

mysqld\] 和 \[mysql\] 组分别应用于 mysqld 服务器程序和 mysql 客户端程序 \[server\] 组下边的启动选项将作用于所有的服务器程序。 \[client\] 组下边的启动选项将作用于所有的客户端程序。 ## my.cnf各种启动命令会读取的组: ![image.png](https://file.jishuzhan.net/article/1692871207231164418/8c71f3aaaa36467cb4f8175e780a32a4.png) 现在我们以 macOS 操作系统为例,在 /etc/mysql/my.cnf 这个配置文件中添加一些内容: \[server

skip-networking

default-storage-engine=MyISAM

直接用 mysqld 启动服务器程序这个就生效了

通过启动设置系统变量:

如果同一个启动选项既出现在命令行中,又出现在配置文件中,那么以命令行中的启动选项为准!

比如我们在配置文件中写了:

server

default-storage-engine=InnoDB

而我们的启动命令是:

mysql.server start --default-storage-engine=MyISAM 那最后 default-storage-engine 的值就是 MyISAM !

对于启动选项来说,如果启动选项名由多个单词组成,各个单词之间用短划线 - 或者下划线 _ 连接起来都可

以,但是对应的系统变量之间必须使用下划线 _ 连接起来。

mysql一个服务端设置不同的客户端配置:

GLOBAL :全局变量,影响服务器的整体操作。

SESSION :会话变量,影响某个客户端连接的操作。(注: SESSION 有个别名叫 LOCAL )

服务器启动时,全局变量为默认值,但是每个连接的客户端有一个会话变量

比如我们想在服务器运行过程中把作用范围为 GLOBAL 的系统变量 default_storage_engine 的值修改为

MyISAM ,也就是想让之后新连接到服务器的客户端都用 MyISAM 作为默认的存储引擎,那我们可以选择下边两条

语句中的任意一条来进行设置:

语句一:SET GLOBAL default_storage_engine = MyISAM;

语句二:SET @@GLOBAL.default_storage_engine = MyISAM;

如果只想对本客户端生效,也可以选择下边三条语句中的任意一条来进行设置:

语句一:SET SESSION default_storage_engine = MyISAM;

语句二:SET @@SESSION.default_storage_engine = MyISAM;

语句三:SET default_storage_engine = MyISAM;

从上边的 语句三 也可以看出,如果在设置系统变量的语句中省略了作用范围,默认的作用范围就是 SESSION 。

也就是说 SET 系统变量名 = 值 和 SET SESSION 系统变量名 = 值 是等价的。

查询全局变量:

SHOW GLOBAL VARIABLES LIKE 'default_storage_engine';

查询会话变量:

SHOW SESSION VARIABLES LIKE 'default_storage_engine';

注意:

max_connections :只能用于全局

insert_id:只用于会话

有些系统变量是只读的,并不能设置值

状态变量:

由于 状态变量 是用来显示服务器程序运行状况的,所以它们的值只能由服务器程序自己来设置,我们程序员是 不能设置的。与 系统变量 类似, 状态变量 也有 GLOBAL 和 SESSION 两个作用范围的,所以查看 状态变量 的语 句可以这么写:

SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];

默认的作用范围是 SESSION

SHOW STATUS LIKE 'thread%';

Mysql字符集:

一个字节最多只能表示256种符号,只够英文,中文需要两个字节,256*256

utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。

utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。

注意:在 MySQL 中 utf8 是 utf8mb3 的别名,一个字符最大长度会影响性能,如果存储emoji表情,用utf8mb4

详情:https://zhuanlan.zhihu.com/p/110790115

mysql常用字节,maxlen最大字节

字符集比较规则:

复制代码
mysql> show collation like 'utf8%';

+--------------------------+---------+-----+---------+----------+---------+
| Collation                | Charset | Id  | Default | Compiled | Sortlen |
+--------------------------+---------+-----+---------+----------+---------+
| utf8_general_ci          | utf8    |  33 | Yes     | Yes      |       1 |
| utf8_bin                 | utf8    |  83 |         | Yes      |       1 |
| utf8_unicode_ci          | utf8    | 192 |         | Yes      |       8 |
| utf8_icelandic_ci        | utf8    | 193 |         | Yes      |       8 |
| utf8_latvian_ci          | utf8    | 194 |         | Yes      |       8 |
| utf8_romanian_ci         | utf8    | 195 |         | Yes      |       8 |
| utf8_slovenian_ci        | utf8    | 196 |         | Yes      |       8 |
| utf8_polish_ci           | utf8    | 197 |         | Yes      |       8 |
| utf8_estonian_ci         | utf8    | 198 |         | Yes      |       8 |
| utf8_spanish_ci          | utf8    | 199 |         | Yes      |       8 |
| utf8mb4_general_ci       | utf8mb4 |  45 | Yes     | Yes      |       1 |
| utf8mb4_bin              | utf8mb4 |  46 |         | Yes      |       1 |
| utf8mb4_unicode_ci       | utf8mb4 | 224 |         | Yes      |       8 |
| utf8mb4_icelandic_ci     | utf8mb4 | 225 |         | Yes      |       8 |
+--------------------------+---------+-----+---------+----------+---------+
53 rows in set (0.00 sec)
后缀 英文解释 描述
_ai accent insensitive 不区分重音
_as accent sensitive 区分重音
_ci case insensitive 不区分大小写
_cs case sensitive 区分大小写
_bin binary 以二进制方式比较

比如 utf8_general_ci 这个比较规则是以 ci 结尾的,说明不区分大小写。

如果创建或修改列时没有显式的指定字符集和比较规则,则该列默认用表的字符集和比较规则

如果创建或修改表时没有显式的指定字符集和比较规则,则该表默认用数据库的字符集和比较规则

如果创建或修改数据库时没有显式的指定字符集和比较规则,则该数据库默认用服务器的字符集和比较规则

编码和解码使用的字符集不一致的后果:

注意:

1.服务器认为客户端发送过来的请求是用 character_set_client 编码的。

假设你的客户端采用的字符集和 character_set_client 不一样的话,这就会出现意想不到的情况。比如我的 客户端使用的是 utf8 字符集,如果把系统变量 character_set_client 的值设置为 ascii 的话,服务器可 能无法理解我们发送的请求,更别谈处理这个请求了。

2.服务器将把得到的结果集使用 character_set_results 编码后发送给客户端。

假设你的客户端采用的字符集和 character_set_results 不一样的话,这就可能会出现客户端无法解码结果 集的情况,结果就是在你的屏幕上出现乱码。比如我的客户端使用的是 utf8 字符集,如果把系统变量

character_set_results 的值设置为 ascii 的话,可能会产生乱码。

3.character_set_connection 只是服务器在将请求的字节串从 character_set_client 转换为 character_set_connection 时使用,它是什么其实没多重要,但是一定要注意,该字符集包含的字符范围

一定涵盖请求中的字符,要不然会导致有的字符无法使用 character_set_connection 代表的字符集进行编

码。比如你把 character_set_client 设置为 utf8 ,把 character_set_connection 设置成 ascii ,那么此 时你如果从客户端发送一个汉字到服务器,那么服务器无法使用 ascii 字符集来编码这个汉字,就会向用户 发出一个警告。

解决方案:

我们通常都把 character_set_client 、character_set_connection、 character_set_results 这三个系统变量设成和客户端使用的字符集一致的情况

SET NAMES 字符集名;

这一条语句产生的效果和我们执行这3条的效果是一样的:

SET character_set_client = 字符集名;

SET character_set_connection = 字符集名; SET character_set_results = 字符集名;

相关推荐
coderlin_1 小时前
BI布局拖拽 (1) 深入react-gird-layout源码
android·javascript·react.js
sun0077002 小时前
mysql索引底层原理
数据库·mysql
2501_915918412 小时前
Fiddler中文版全面评测:功能亮点、使用场景与中文网资源整合指南
android·ios·小程序·https·uni-app·iphone·webview
程序员秘密基地2 小时前
基于html,css,vue,vscode,idea,,java,springboot,mysql数据库,在线旅游,景点管理系统
java·spring boot·mysql·spring·web3
wen's3 小时前
React Native安卓刘海屏适配终极方案:仅需修改 AndroidManifest.xml!
android·xml·react native
编程乐学4 小时前
网络资源模板--基于Android Studio 实现的聊天App
android·android studio·大作业·移动端开发·安卓移动开发·聊天app
叁沐4 小时前
MySQL 11 怎么给字符串字段加索引?
mysql
没有了遇见6 小时前
Android 通过 SO 库安全存储敏感数据,解决接口劫持问题
android
hsx6666 小时前
使用一个 RecyclerView 构建复杂多类型布局
android
hsx6666 小时前
利用 onMeasure、onLayout、onDraw 创建自定义 View
android