mysql 大小写敏感 lower_case_table_names

本文介绍了MySQL中数据库和表名大小写敏感性的配置方法,包括lower_case_table_names变量的作用及不同设置的影响,并提供了如何安全地更改这些设置的步骤。
 在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
    在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。一个显著的例外情况是Mac OS X,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。然而,Mac OS X也支持UFS卷,该卷对大小写敏感,就像Unix一样。
    变量 lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。

Mysql官方文档的介绍:

Value

Meaning

0

Table and database names are stored on disk using the lettercase specified in the CREATE TABLE orCREATE DATABASE statement. Name comparisons are case sensitive. You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or Mac OS X). If you force this variable to 0 with --lower-case-table-names=0 on a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption may result.

1

Table names are stored in lowercase on disk and name comparisons are not case sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases.

2

Table and database names are stored on disk using the lettercase specified in the CREATE TABLE orCREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case sensitive! InnoDB table names are stored in lowercase, as for lower_case_table_names=1.

 

默认为0,大小写敏感。

设置1,大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于sql语句都是转换为小写对表和DB进行查找。

设置2,创建的表和DB依据语句上格式存放,凡是查找都是转换为小写进行。

If you plan to set the lower_case_table_names system variable to 1 on Unix, you must first convert your old database and table names to lowercase before stopping mysqld and restarting it with the new variable setting. To do this for an individual table, use RENAME TABLE:

当想设置lower_case_table_names = 1时,在重启数据库实例之前就需要将原来的数据库和表转换为小写。

官方文档的解释。要开启lower_case_table_names = 1 。先要将大写字母数据库更改为小写。否则将找不到数据库名。

 所以要想忽略大小写,还需要提前将大写数据库名更改小写,否则报错。数据库名无法rename.可以新建一个小写的数据库名。
然后rename table 到新的数据库,完成表的迁移。
在进行数据库参数设置之前,需要掌握这个参数带来的影响,切不可盲目设置。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12798004/viewspace-2150864/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12798004/viewspace-2150864/

### 如何在 MySQL 5.7 中正确修改 `lower_case_table_names` 参数 在 MySQL 5.7 中,`lower_case_table_names` 参数用于控制数据库和表名的大小写敏感性。该参数的设置会影响数据库和表名的存储方式以及查询时的匹配规则。以下是关于如何正确修改 `lower_case_table_names` 参数的设置指南及注意事项。 #### 设置方法 1. **确认当前值**:首先需要确认当前 `lower_case_table_names` 的值。 ```sql SHOW VARIABLES LIKE 'lower_case_table_names'; ``` 如果返回值为 `0`,表示区分大小写;如果返回值为 `1`,表示不区分大小写且以小写形式存储[^4]。 2. **修改配置文件**:编辑 MySQL 配置文件(通常是 `my.cnf` 或 `my.ini`),添加或修改以下内容: ```ini [mysqld] lower_case_table_names=1 ``` 这里的值可以是 `0`、`1` 或 `2`,具体含义如下: - `0`:区分大小写(仅适用于 Windows 和 macOS)。 - `1`:不区分大小写,所有名称都以小写形式存储。 - `2`:不区分大小写,但保留原始名称的大小写形式(仅适用于 Windows 和 macOS)[^5]。 3. **重启 MySQL 服务**:保存配置文件后,重启 MySQL 服务以使更改生效。 ```bash systemctl restart mysql ``` 4. **验证修改结果**:再次运行以下命令以确认参数已成功修改。 ```sql SHOW VARIABLES LIKE 'lower_case_table_names'; ``` #### 注意事项 - **数据一致性问题**:如果在 Unix 系统中将 `lower_case_table_names` 从 `0` 修改为 `1`,必须确保所有现有的数据库和表名都是小写的。否则,可能会导致无法访问旧的表或数据库[^5]。 - **不可动态修改**:`lower_case_table_names` 是一个静态参数,无法在运行时动态修改,必须通过修改配置文件并重启服务来生效[^2]。 - **升级兼容性**:如果计划从 MySQL 5.7 升级到更高版本(如 MySQL 8.0),需要注意某些云服务(如 AWS RDS)可能不允许更改 `lower_case_table_names` 参数。例如,在 AWS RDS 中,从 MySQL 5.7 升级到 8.0 时,可能会遇到错误提示“The parameter value for lower_case_table_names can't be changed for MySQL 8.0 DB instances.”[^3]。 - **命名规范建议**:为了避免大小写敏感性带来的问题,推荐在定义数据库、表和列时使用全小写字母加下划线的方式,避免使用大写字母[^5]。 ```python # 示例:Python 脚本检查 MySQL 配置 import mysql.connector connection = mysql.connector.connect( host="localhost", user="root", password="password" ) cursor = connection.cursor() cursor.execute("SHOW VARIABLES LIKE 'lower_case_table_names';") result = cursor.fetchone() print(f"lower_case_table_names: {result[1]}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值