大连密封材料 发表于 2024-10-16 03:38:07

MySQL 5.7 和 MySQL 8.0 小写敏感性的设置比较

MySQL 5.7 和 MySQL 8.0 在处置处罚巨细写敏感性方面有一些差别,这些差别重要体如今操作系统、配置文件和数据库对象名称的处置处罚上。
操作系统的影响



[*] Windows:

[*]在 Windows 上,默认环境下,MySQL 对表名和数据库名是不区分巨细写的。
[*]这是因为 Windows 文件系统本身是不区分巨细写的。

[*] Unix/Linux:

[*]在 Unix 和 Linux 系统上,默认环境下,MySQL 对表名和数据库名是区分巨细写的。
[*]这是因为 Unix 和 Linux 文件系统是区分巨细写的。

配置文件设置

可以通过 my.cnf 或 my.ini 配置文件中的 lower_case_table_names 参数来控制 MySQL 的巨细写敏感性。


[*]lower_case_table_names 参数:

[*]0: 表名按照创建时指定的巨细写存储(默认值)。
[*]1: 表名在存储时转换为小写。比较操作时不区分巨细写。
[*]2: 表名按照创建时指定的巨细写存储,但比较操作时不区分巨细写。

MySQL 5.7



[*]默认环境下,在 Unix 和 Linux 上,lower_case_table_names 的默认值是 0,即区分巨细写。
[*]在 Windows 上,lower_case_table_names 的默认值是 1,即不区分巨细写,而且所有表名都转换为小写。
MySQL 8.0



[*]在 MySQL 8.0 中,lower_case_table_names 的举动与 MySQL 5.7 根本相同。
[*]但在某些环境下,MySQL 8.0 大概会更加严格地处置处罚巨细写题目,特别是在使用新的数据字典功能时。
数据库对象名称的处置处罚



[*] 表名和数据库名:

[*]假如 lower_case_table_names 设置为 0,则表名和数据库名完全按照创建时的巨细写举行存储和比较。
[*]假如 lower_case_table_names 设置为 1,则表名和数据库名在存储时会被转换为小写。
[*]假如 lower_case_table_names 设置为 2,则表名和数据库名在存储时保持原样,但在比较时忽略巨细写。

[*] 列名:

[*]列名总是不区分巨细写,无论 lower_case_table_names 设置为何值。
[*]例如,SELECT column_name FROM table_name; 和 SELECT Column_Name FROM Table_Name; 是等价的。

示例

假设你有一个表名为 Users,而且 lower_case_table_names 设置为 1:


[*] MySQL 5.7 和 MySQL 8.0 (在 Windows 上):

[*]创建表:CREATE TABLE Users (id INT);
[*]存储为:users
[*]查询:SELECT * FROM users; 和 SELECT * FROM Users; 都有效。

[*] MySQL 5.7 和 MySQL 8.0 (在 Unix/Linux 上, lower_case_table_names=0):

[*]创建表:CREATE TABLE Users (id INT);
[*]存储为:Users
[*]查询:SELECT * FROM Users; 有效,而 SELECT * FROM users; 无效。

[*] MySQL 5.7 和 MySQL 8.0 (在 Unix/Linux 上, lower_case_table_names=1):

[*]创建表:CREATE TABLE Users (id INT);
[*]存储为:users
[*]查询:SELECT * FROM users; 和 SELECT * FROM Users; 都有效。

总结



[*] 默认举动:

[*]在 Windows 上,lower_case_table_names 默以为 1,不区分巨细写。
[*]在 Unix/Linux 上,lower_case_table_names 默以为 0,区分巨细写。

[*] 配置选项:

[*]lower_case_table_names=0:区分巨细写。
[*]lower_case_table_names=1:不区分巨细写,存储时转为小写。
[*]lower_case_table_names=2:存储时保留原样,比较时忽略巨细写。

[*] 列名:

[*]列名总是不区分巨细写。

通过合理配置 lower_case_table_names 参数,可以确保数据库在不同操作系统上的举动同等。
在 MySQL 5.7 和 MySQL 8.0 中设置 lower_case_table_names 参数的根本步骤是相似的,但在一些细节和举动上存在一些差别。
共同点


[*] 配置文件:

[*]在两个版本中,你都需要编辑 MySQL 的配置文件(通常是 my.cnf 或 my.ini)。
[*]配置项的位置通常在 部门。

[*] 参数值:

[*]lower_case_table_names=0:表名按照创建时指定的巨细写存储(区分巨细写)。
[*]lower_case_table_names=1:表名在存储时转换为小写(不区分巨细写)。
[*]lower_case_table_names=2:表名按照创建时指定的巨细写存储,但比较操作时不区分巨细写。

[*] 重启服务:

[*]在两个版本中,修改配置后都需要重启 MySQL 服务以使更改生效。

区别


[*] 默认值:

[*]MySQL 5.7: 默认值取决于操作系统。在 Unix 系统上,默认值是 0;在 Windows 上,默认值是 1。
[*]MySQL 8.0: 默认值也取决于操作系统。在 Unix 系统上,默认值是 0;在 Windows 上,默认值是 1。但 MySQL 8.0 引入了更多的平台同等性检查,确保在不同平台上的同等性。

[*] 平台同等性:

[*]MySQL 5.7: 在某些环境下,假如在不同的操作系统之间迁移数据,大概会遇到巨细写敏感的题目。
[*]MySQL 8.0: MySQL 8.0 对 lower_case_table_names 的处置处罚更加严格,特别是在跨平台迁移时。例如,假如你从一个 lower_case_table_names=0 的系统迁移到 lower_case_table_names=1 的系统,MySQL 8.0 大概会更严格地拒绝这种操作,以防止潜在的数据破坏。

[*] 初始化过程:

[*]MySQL 5.7: 初始化过程中,lower_case_table_names 参数的设置会影响数据目录的布局,但不会阻止初始化过程。
[*]MySQL 8.0: MySQL 8.0 在初始化过程中对 lower_case_table_names 参数的设置更为严格。假如你试图在一个已经使用不同 lower_case_table_names 设置的数据目录上启动 MySQL 8.0,大概会遇到错误。这有助于防止数据破坏和不同等。

[*] 日志和警告:

[*]MySQL 5.7: 假如你在启动时设置了不同等的 lower_case_table_names 值,MySQL 5.7 大概会在日志中记载警告信息。
[*]MySQL 8.0: MySQL 8.0 在这方面更为严格,不仅会记载警告信息,还大概直接拒绝启动,直到你办理配置不同等的题目。

示例配置

MySQL 5.7


# 其他配置项...
lower_case_table_names=1
MySQL 8.0


# 其他配置项...
lower_case_table_names=1
重启服务

在 Linux 上

sudo systemctl restart mysql
大概
sudo service mysql restart
在 Windows 上



[*]打开“服务”管理器:

[*]按 Win + R,输入 services.msc,然后按回车。

[*]找到 MySQL 服务(例如 MySQL80 或 MySQL57)。
[*]右键点击该服务,选择“重启”。
验证设置

SHOW VARIABLES LIKE 'lower_case_table_names';
注意事项



[*]数据迁移:

[*]特别是在从 MySQL 5.7 升级到 MySQL 8.0 时,确保 lower_case_table_names 设置同等,以避免潜在的数据破坏或不同等题目。

[*]同等性:

[*]在所有环境中保持同等的 lower_case_table_names 设置,以避免因环境不同而导致的题目。

通过以上步骤,你可以成功设置 lower_case_table_names 参数,并确保在 MySQL 5.7 和 MySQL 8.0 中的举动符合你的需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL 5.7 和 MySQL 8.0 小写敏感性的设置比较