系统参数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版本及操纵系统之间迁徙方便,使用起来更加规范。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |