关于mysql的lower_case_table_names引发的思考

lower_case_table_names设置大小写敏感的三个值0、1、2的区别?

lower_case_table_names参数详解

1.参数说明:

  • lower_case_table_names= 0 表名 存储为给定的大小和比较是区分大小写的
  • lower_case_table_names = 1 表名 存储在磁盘是小写的 ,但是 比较的时候是不区分大小写
  • lower_case_table_names= 2 表名 存储为给定的大小写 但是 比较的时候是小写的

unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2

2.查看方法:

# 进入mysql命令行 执行以下任一语句查看:show variables like 'lower_case_table_names';select @@lower_case_table_names;

3.更改方法:

更改数据库参数文件 my.cnf

在mysqld下 添加或修改 lower_case_table_names = 1

之后重启数据库

4.现实情况修改 注意事项:

因目前MySQL安装在 Linux 系统上较多 初始化时采取了默认的lower_case_table_names值 即区分大小写,后续可能会造成同一实例大小写库表都存在的情况,调用时还要注意大小写。

这时 更改步骤如下:

1.核实实例中是否存在大写的库及表

2.将大写的库名及表名改为小写

更改库名可参考 : MySQL数据库改名的三种方法

更改表名:rename table TEST_TB to test_tb;

3.设置lower_case_table_names = 1

4.重启数据库

### MySQL 中 `lower_case_table_names` 参数的用途和配置方法 #### 参数用途 `lower_case_table_names` 参数用于控制 MySQL 数据库中表名、数据库名以及触发器名的大小写敏感性。该参数的具体作用取决于其值的设置,不同的值会导致不同的行为[^1]。 - **值为 0**:表示表名区分大小写,完全依赖于操作系统的文件系统。如果操作系统对文件名区分大小写,则 MySQL 表名也会区分大小写。 - **值为 1**:表示表名在存储时会转换为小写,但查询时可以使用大小写不敏感的方式进行匹配。这是 Windows 系统上的默认值。 - **值为 2**:表示表名以大小写形式存储,但在查询时会进行大小写不敏感的比较。这种设置通常用于类 Unix 系统。 #### 配置方法 配置 `lower_case_table_names` 参数需要修改 MySQL 的配置文件 `my.cnf` 或 `my.ini`,并在 `[mysqld]` 节点下添加或修改该参数的值[^3]。 ```ini [mysqld] lower_case_table_names=1 ``` 完成配置后,需要重启 MySQL 服务以使更改生效。需要注意的是,`lower_case_table_names` 参数在数据库初始化后不能动态更改,否则可能导致数据字典与实际设置不一致的问题。 #### 注意事项 1. **初始化前设置**:该参数必须在初始化 MySQL 数据目录之前设置,否则可能会导致错误。例如,MySQL 8.0 在启动时会检查数据字典中的设置与当前配置是否一致,如果不一致则会报错并终止启动。 2. **跨平台迁移**:如果需要在不同操作系统之间迁移数据库,建议将 `lower_case_table_names` 设置为 1,以避免因大小写敏感性差异导致的问题。 3. **现有数据库的影响**:对于已经存在的数据库,更改此参数可能需要重新导出和导入数据,以确保表名的一致性[^2]。 #### 示例代码 以下是一个示例,展示如何通过命令行查看当前的 `lower_case_table_names` 设置: ```sql SHOW VARIABLES LIKE 'lower_case_table_names'; ``` #### 总结 `lower_case_table_names` 参数在 MySQL 中用于控制表名的大小写敏感性。合理设置该参数可以避免因大小写问题导致的查询错误,特别是在跨平台迁移或多用户协作环境中尤为重要[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值