lower_case_table_names与表格名称大小写的问题

1 简介
在MySQL中,数据库对应数据目录中的目录。数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。一个显著的例外情况是Mac OS X,它基于Unix但使用默认文件系统类型(HFS+),对大小写不敏感。然而,Mac OS X也支持UFS卷,该卷对大小写敏感,就像Unix一样。
变量lower_case_file_system说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。
例如在windows下查看:

说明windows系统对大小写不敏感,mysql也默认设置为对大小写不敏感。

2 大小写区分规则
linux下:
数据库名与表名是严格区分大小写的;
表的别名是严格区分大小写的;
列名与列的别名在所有的情况下均是忽略大小写的;
变量名也是严格区分大小写的;
windows下:
都不区分大小写
Mac OS下(非UFS卷):
都不区分大小写

3 参数说明(lower_case_table_names)
unix下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2 .

                        参数值                         解释

0 使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母在硬盘上保存表名和数据库名。名称比较对大小写敏感。在大小写不敏感的操作系统如windows或Mac OS x上我们不能将该参数设为0,如果在大小写不敏感的文件系统上将--lowercase-table-names强制设为0,并且使用不同的大小写访问MyISAM表名,可能会导致索引破坏。
1 表名在硬盘上以小写保存,名称比较对大小写不敏感。MySQL将所有表名转换为小写在存储和查找表上。该行为也适合数据库名和表的别名。该值为Windows的默认值。
2 表名和数据库名在硬盘上使用CREATE TABLE或CREATE DATABASE语句指定的大小写字母进行保存,但MySQL将它们转换为小写在查找表上。名称比较对大小写不敏感,即按照大小写来保存,按照小写来比较。注释:只在对大小写不敏感的文件系统上适用! innodb表名用小写保存。
4 由大小写敏感转换为不敏感方法
如果原来所建立库及表都是对大小写敏感的,想要转换为对大小写不敏感,主要需要进行如下3步:
1.将数据库数据通过mysqldump导出。
2.在my.cnf中更改lower_case_tables_name = 1,并重启mysql数据库。
3.将导出的数据导入mysql数据库。

5 注意事项
为了避免大小写引发的问题,一种推荐的命名规则是:在定义数据库、表、列的时候全部采用小写字母加下划线的方式,不使用任何大写字母
在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不出名字原来是用大写还是小写。
请注意在Unix中如果以前lower_case_tables_name = 0将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写。


原文地址:http://blog.youkuaiyun.com/jesseyoung/article/details/40617031
博客主页:http://blog.youkuaiyun.com/jesseyoung

### 如何在 MySQL 中通过 `lower_case_table_names` 参数设置表名大小写的处理方式 #### 配置方法 为了实现 MySQL 表名的大小写敏感性控制,可以通过调整 `lower_case_table_names` 参数来完成。此参数有三个可能的取值:0、1 和 2。 - 当 `lower_case_table_names=0` 时,表示表名存储为指定的形式并区分大小写[^1]。 - 如果将其设为 `lower_case_table_names=1`,则所有的表名都会被强制转换成小写形式,并且不再区分大小写[^2]。 - 对于 `lower_case_table_names=2` 的情况,表名会按照指定的方式保存到数据库中,但在访问的时候会被自动转化为小写字母后再匹配实际存在的对象名称。 需要注意的是,在 Windows 平台上推荐使用值 '1' 来避免因操作系统本身的文件系统特性带来的潜在问题;而在 Linux 或 macOS 上,则可以根据具体需求选择合适的选项。 #### 实际操作步骤说明 要更改该参数的具体做法如下: 1. 编辑 MySQL 的配置文件 (通常命名为 my.cnf 或者 my.ini),位置取决于您的安装环境以及平台差异; ```bash sudo nano /etc/mysql/my.cnf # Unix/Linux 系统上常见的路径之一 ``` 2. 找到 `[mysqld]` 节点下的相关内容区域,如果没有该项可以手动创建它; 3. 添加或者更新现有的一行内容为期望的状态: ```ini [mysqld] lower_case_table_names=1 # 这里填写您希望使用的数值 ``` 4. 完成上述修改之后重启服务使改动生效即可 ```bash systemctl restart mysql # 使用 systemd 控制的服务启动命令例子 service mysqld restart # 另一种传统风格的服务管理指令示范 ``` 请注意一旦设置了 `lower_case_table_names` 值以后再改变它的设定可能会引起一些兼容性和数据迁移方面的问题,因此建议慎重考虑初始部署阶段就做好规划。 ```sql -- 查询当前系统的 lower_case_table_names 设置状态 SHOW VARIABLES LIKE 'lower_case_table_names'; ``` 以上就是关于如何利用 `lower_case_table_names` 参数去定义 MySQL 数据库引擎对于表命名规则中小写大写敏感度行为的一个总结描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值