MySQL参数lower_case_table_name

系统参数lower_case_table_name是 MySQL 中的一个系统变量,它控制着 MySQL 服务器如何存储和比较表名的大小写。这个参数对于在不同操作系统上运行的 MySQL 实例来说非常重要,因为不同操作系统对文件名的大小写敏感性不同。

lower_case_table_names 可以设置为以下几个值之一:

  • 0(默认值在 Unix/Linux 上):表名存储为给定的大小写,但比较是不区分大小写的。这意味着,在 Unix/Linux 系统上,尽管表名在数据库中是以创建时的大小写存储的,但你在查询时可以使用任意大小写来引用表名,MySQL 会将它们视为相同。

  • 1(默认值在 Windows 上):表名以小写形式存储在磁盘上,并且比较也是不区分大小写的。这意味着,无论你在创建表时使用了什么大小写,表名在数据库内部总是以小写形式存储。查询时,无论使用什么大小写,MySQL 都会将它们视为相同。

  • 2(默认值在 macOS 上,但通常不建议在生产环境中使用):表名按照创建时的大小写存储,但比较是区分大小写的。这通常只在类 Unix 系统(如 macOS)上,且文件系统(如 HFS+)支持区分大小写时使用。然而,由于 MySQL 的某些部分(如触发器、存储过程等)可能不总是区分大小写,因此,在生产环境中使用 lower_case_table_names=2 可能会导致不可预见的问题。

重要注意事项:
在MySQL8.0之前可以通过参数配置文件my.cnf修改这个参数,修改后重启数据生效。

在MySQL8.0之后的版本,只允许在数据库初始化时指定,之后不允许修改了。

(root@localhost)[superdb]>set global lower_case_table_names=1;
ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable
  • 更改 lower_case_table_names 的值并重启 MySQL 服务后,可能会影响现有数据库的可访问性。特别是从 lower_case_table_names=0 或 2 切换到 1,或者从 1 切换到 0 或 2 时,可能会因为大小写不匹配而导致无法找到表。

  • 如果你正在从一种操作系统迁移到另一种操作系统,并且需要保持数据库的兼容性,请确保 lower_case_table_names 的设置与目标系统的默认设置相匹配。

  • 在 Windows 上,lower_case_table_names 的默认值是 1,这意味着表名在内部总是以小写形式存储。因此,在 Windows 上创建的数据库在迁移到 Unix/Linux 系统时,如果 Unix/Linux 系统的 lower_case_table_names 设置为 0,可能会导致问题。

总之,lower_case_table_names 是一个重要的系统变量,它影响着 MySQL 如何处理表名的大小写。在部署和迁移数据库时,应该仔细考虑这个变量的设置。个人经验所有操作系统,统一按照lower_case_table_names=1来配置到my.cnf文件中,保证各MySQL版本及操作系统之间迁移方便,使用起来更加规范。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Ubuntu上设置MySQLlower_case_table_names参数无效可能是由于以下几个原因: 1. 参数设置错误:请确保在MySQL配置文件中正确设置了lower_case_table_names参数。可以通过编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件来修改参数值。确保在[mysqld]部分添加或修改lower_case_table_names = 1,并重新启动MySQL服务。 2. 配置文件位置错误:在某些情况下,MySQL的配置文件可能位于不同的位置。可以通过运行以下命令来查找配置文件的位置:sudo find / -name "my.cnf"。然后在找到的配置文件中进行相应的修改。 3. 参数冲突:如果在MySQL配置文件中同时设置了lower_case_table_names参数和其他与大小写相关的参数(如lower_case_file_system),可能会导致参数无效。请确保只设置lower_case_table_names参数,并将其他相关参数注释掉或删除。 4. 参数生效范围:lower_case_table_names参数只对新创建的表有效,对于已存在的表可能不会生效。如果需要将已存在的表名转换为小写,可以使用RENAME TABLE语句进行修改。 5. 数据库引擎限制:某些数据库引擎(如InnoDB)可能对lower_case_table_names参数有限制。请确保使用的数据库引擎支持该参数,并且已正确配置。 如果以上方法都无效,您可以尝试重新安装MySQL,并在安装过程中正确设置lower_case_table_names参数。另外,您还可以查看MySQL的错误日志文件(通常位于/var/log/mysql/error.log),以获取更多关于参数设置无效的详细信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值