MySQL参数lower_case_table_name

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

系统参数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之后的版本,只答应在数据库初始化时指定,之后不答应修改了。
  1. (root@localhost)[superdb]>set global lower_case_table_names=1;
  2. 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版本及操纵系统之间迁徙方便,使用起来更加规范。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表