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

打印 上一主题 下一主题

主题 1684|帖子 1684|积分 5052

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  1. [mysqld]
  2. # 其他配置项...
  3. lower_case_table_names=1
复制代码
MySQL 8.0

  1. [mysqld]
  2. # 其他配置项...
  3. lower_case_table_names=1
复制代码
重启服务

在 Linux 上

  1. sudo systemctl restart mysql
复制代码
大概
  1. sudo service mysql restart
复制代码
在 Windows 上



  • 打开“服务”管理器:

    • 按 Win + R,输入 services.msc,然后按回车。

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

  1. 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表