马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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)。
- 配置项的位置通常在 [mysqld] 部门。
- 参数值:
- 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
- [mysqld]
- # 其他配置项...
- lower_case_table_names=1
复制代码 MySQL 8.0
- [mysqld]
- # 其他配置项...
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |