Window如何修改Mysql区别数据库名,表名的大小写?

本文介绍如何在Windows环境下配置Mysql使其支持表名及字段名的大小写敏感。通过修改my.ini文件中的lower_case_table_names参数,并重启Mysql服务,可以实现这一目标。
  • 前言
    当在window使用Mysql的伙伴们都会发现,在window下默认使用Mysql创建数据库或者表都是不会区分大小写的,即使你创建的时候是大写,当系统默认生成就是小写,然而当表名和属性名同名的时候(例如Score表中的score属性),就会非常抓狂。

  • 实践
    为了让Mysql区分大小写,个人经验以下步骤:

第一步:首先找到Mysql下的my.ini文件并修改。

    # 在[mysqld] 后面添加
    lower_case_table_names=0  

lower_case_table_name = 0 表示支持大小写 ,而 = 1则表示不支持大小写,my.ini中默认没有这语句,所以必须自己添加。

这里写图片描述



第二步:win+R打开”运行”窗口,输入services.msc

这里写图片描述


第三步:找到MYSQL56这个服务,右键点击重新启动就ok了

这里写图片描述


第四步:重新打开Mysql输入sql语句:Create Database ScoreDB2

这里写图片描述

<think>嗯,用户问为什么在Windows的MySQL里查information_schema.COLUMNS拿不到结果,虽然数据库名都正确。我之前已经给过排查步骤,现在用户又补充了引用资料,需要结合这些信息再分析。 首先,用户提供的引用1提到INFORMATION_SCHEMA是一个虚拟数据库,只能用SELECT查询,不能修改。这可能意味着用户是否误用了其他操作,比如INSERT或UPDATE?不过用户的问题还是查询不到结果,所以这个可能不是主因,但需要确认用户是否有权限访问这个系统库。 引用2指出COLUMNS存储所有数据库的列信息,用户可以通过SHOW COLUMNS或直接查询COLUMNS来获取信息。这里可能需要检查用户是否使用了正确的语法,比如WHERE条件是否正确,特别是TABLE_SCHEMA和TABLE_NAME的格式是否正确,比如有没有用引号包裹,或者是否用了反引号,因为数据库名中有特殊字符的话可能需要转义。 用户提到数据库名是'garbage-system',里面有连字符,可能在查询时需要用反引号括起来,或者在字符串中使用正确的引号。比如在WHERE子句中,TABLE_SCHEMA = 'garbage-system'是否正确,还是应该用反引号包裹数据库名?或者在SQL语句中,用户是否错误地添加了反引号在字符串里,比如写成'`garbage-system`',这可能导致数据库名解析错误。 另外,用户之前的问题中,给出的SQL示例里TABLE_SCHEMA = '`garbage-system`',这里用了反引号包裹在单引号里,这其实是错误的,因为反引号是用来标识数据库名的,而作为字符串值应该直接写'garbage-system'。所以这可能是一个关键错误,导致查询条件不匹配,从而返回空结果。 另外,权限问题也需要考虑。用户是否有权限访问information_schema?虽然通常默认有权限,但某些情况下可能被限制。需要确认用户是否有SELECT权限,或者是否被防火墙、安全组规则阻止了访问系统。 还有,Windows下MySQL大小写的处理可能不同。虽然Windows默认是大小写不敏感的,但数据库名大小写是否完全匹配?用户确认拼写正确,但可能需要再次确认是否有隐藏字符或空格。 此外,存储引擎的问题。如果是临时或者视图,可能不会出现在COLUMNS中。用户是否查询的是临时?或者是否存在其他特殊类型的? 还要检查MySQL的版本是否支持information_schema,虽然现在应该都支持,但某些旧版本可能有差异。另外,是否使用了正确的语法,比如在WHERE子句中使用单引号包裹字符串值,而不是反引号。 总结可能的原因: 1. 数据库名中的连字符导致需要用反引号包裹,但用户在WHERE条件中将反引号作为字符串的一部分,导致实际查询的数据库名是`garbage-system`而不是garbage-system。 2. 权限问题,用户没有访问information_schema的权限。 3. 是临时或视图,不在COLUMNS中。 4. 确实不存在,尽管用户确认存在,可能需要重新验证。 5. 大小写问题,虽然Windows默认不敏感,但可能配置不同。 6. 其他字符问题,比如空格或特殊符号未正确处理。 需要逐步引导用户检查这些方面,特别是数据库名的引号使用是否正确,权限是否足够,以及是否存在。</think>针对Windows环境下MySQL查询$information\_schema.COLUMNS$字段信息失败的问题,结合系统特性和引用资料,以下是深度排查指南: ### 一、关键排查步骤 1. **特殊符号转义问题** - 对含连字符的数据库名$garbage-system$必须使用反引号包裹 - *错误示例*: ```sql WHERE TABLE_SCHEMA = 'garbage-system' -- 未转译连字符 ``` - *正确写法*: ```sql WHERE TABLE_SCHEMA = '`garbage-system`' -- 使用反引号包裹 ``` 2. **权限验证(Windows特有)** ```sql SHOW GRANTS FOR CURRENT_USER(); -- 检查是否有以下权限 ``` - 必须包含$SELECT$权限于: ```sql GRANT SELECT ON `information_schema`.* TO 'user'@'host'; GRANT SELECT ON `garbage-system`.* TO 'user'@'host'; ``` 3. **文件系统匹配验证** - 通过文件路径确认存在性: ```bash # 默认数据目录(通过SHOW VARIABLES LIKE 'datadir';获取) C:\ProgramData\MySQL\MySQL Server 8.0\Data\garbage-system\ ``` - 检查是否存在$picture.frm$(MyISAM)或$picture.ibd$(InnoDB) ### 二、Windows特有陷阱 1. **ANSI转义问题** - 在CMD/PowerShell行时特殊字符需双转义: ```sql WHERE TABLE_SCHEMA = '\\`garbage-system\\`' -- 连接工具中的转义 ``` 2. **命管道权限** - 通过任务管理器检查$MySQL$服务账户是否有权限访问$information\_schema$ - *典型错误*:使用$LOCAL SERVICE$账户运行时权限不足 ### 三、验证实验 1. **分步验证法** ```sql -- 阶段1:验证库存在性 SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'garbage-system'; -- 阶段2:验证存在性 SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'garbage-system' AND TABLE_NAME = 'picture'; ``` ### 四、高级调试方案 1. **启用通用日志追踪** ```sql SET GLOBAL general_log = 'ON'; -- 记录所有SQL操作 SHOW VARIABLES LIKE 'general_log%'; -- 查看日志路径 ``` 2. **内存直查(MySQL 8.0+)** ```sql SELECT * FROM performance_schema.metadata_locks WHERE OBJECT_SCHEMA = 'garbage-system'; ``` ### 五、错误对照 | 现象 | Windows特有原因 | 解决方案 | |----------------------|--------------------------|---------------------------| | ERROR 1142 (42000) | 未授予$information_schema$访问权 | 使用管理员账户行`GRANT SELECT ON information_schema.* TO user` | | 查询结果乱码 | 控制台字符集不匹配 | 行`SET NAMES gbk;` | | 存在但查无结果 | 文件系统缓存未更新 | 行`FLUSH TABLES;` | ### 六、扩展工具验证 1. **使用mysqlcheck工具** ```cmd mysqlcheck -u root -p --analyze garbage-system picture ``` 2. **查看INNODB系统视图** ```sql SELECT * FROM information_schema.INNODB_TABLES WHERE NAME LIKE '%garbage-system/picture%'; ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值