mysql数据库名和表名大小写问题记录

本文探讨了在尝试访问MySQL数据库时遇到的ERROR1049(42000)问题,详细解释了该错误与数据库名称大小写敏感性的关系,并提供了通过调整my.cnf配置文件中的lower_case_table_names参数来解决此问题的方法。

MYSQL ERROR 1049 (42000): Unknown database

 

 

mysql -uroot -ppasswd

show databases; -- 显示mysql中所有数据库的名称。 

su 

报MYSQL  ERROR 1049 (42000): Unknown database

 

原因

数据库 库名大小写问题

 

遇到这种情况就比较麻烦了,必须在配置文件my.cnf中设置变量lower_case_table_names=0,重启MySQL服务,所以提前规划,使用统一的命名规则就非常重要,可以避免这样的问题出现。另外系统变量lower_case_table_names有三个值:分别是0、1、2. 

1. 设置成0:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时大小写敏感。 

2. 设置成1:表名转小写后存储到硬盘,比较时大小写不敏感。  

3. 设置成2:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时统一转小写比较。 

 

修改成2就行了

### 配置 MySQL 5.7 大小写不敏感的方法 在麒麟操作系统中配置 MySQL 5.7 数据库以实现大小写不敏感的功能,可以通过调整 `lower_case_table_names` 参数完成。以下是具体的配置过程以及注意事项: #### 修改配置文件 打开 MySQL 的配置文件(通常位于 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`)。如果不存在该文件,则需要手动创建并放置到相应目录下。 在 `[mysqld]` 节点下添加如下配置项: ```ini [mysqld] # 忽略数据库大小写 lower_case_table_names=1 ``` 此参数的作用是将存储为小写形式,并允许通过任意大小写方式访问这些[^2]。 #### 关键点解析 - **参数含义** - 当 `lower_case_table_names=0` 时,严格区分大小写。 - 当 `lower_case_table_names=1` 时,将以小写形式存储于磁盘上,但在 SQL 查询中可以使用任何大小写方式进行匹配。 - 如果设置为 `2`,则会保留原始称,但查询时仍然转换为小写处理。不过这种模式仅适用于 Windows 平台,在 Linux 下不可用[^2]。 - **系统兼容性** 在 Linux 系统(如麒麟 OS)中,默认情况下文件系统通常是大小写敏感的 (`lower_case_file_system=OFF`)。这意味着即使设置了 `lower_case_table_names=1`,仍需注意底层文件系统的特性可能带来的影响[^4]。 #### 生效机制 为了使新配置生效,必须重启 MySQL 服务: ```bash sudo systemctl restart mysqld ``` 需要注意的是,一旦修改了 `lower_case_table_names` 参数,原有数据库中的某些可能会变得不可访问。这是因为原有的 `.frm` 文件是以特定大小写的,而新的规则可能导致冲突或找不到对应资源的情况发生[^5]。 #### 示例验证 假设已有一张为 `TestTable` 的,执行以下语句测试其行为变化: ```sql SELECT * FROM testtable; -- 若返回正常结果,则证明大小写不再敏感; ``` --- ### 注意事项 1. **提前备份数据** 更改此类核心配置前务必做好完整的逻辑备份与物理备份工作,以防意外丢失重要信息。 2. **统一命规范** 即便启用了大小写无关选项,建议开发人员始终遵循一致性的命约定,减少潜在混乱风险。 3. **迁移现有环境** 对已有实例应用此项改动之前,请先评估是否会对业务造成干扰,并考虑重新导入清理后的结构化数据副本。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值