背景:因为业务需要,遇到了windows10下mysql不支持表名、数据库名大小写问题,特此记录。
规范来讲,数据库名、表名和列名不建议采用大小写命名的方式,最佳方式是以下划线代替;这次遇到这样的问题,也是由于他人的不规范设计,徒增的工作量,当然工作目的应以解决问题为主(个人想法);另外处理好问题的方式有很多种,唯独我喜欢钻牛角尖,索性就研究了一番。
开始时浏览文档博客,各种方案均尝试了一番,结果却差强人意,走了很多弯路,希望这篇文章能够帮助到大家!

  1. 环境:win10专业版系统,mysql-5.6.43-winx64.zip 官网下载免安装版(个人喜欢绿色版,因为我只需要一个数据库)
  2. 解决方法:my.ini文件中设置lower_case_table_names = 2(注:windows设置2,不是0);
  3. 遇坑:mysql 5.6免安装版,只有my-default.ini文件,无论怎样配置,重启mysql服务,都不生效;原因推测是免安装版mysql数据库读取的配置信息,不是来自文件my-default.ini;我们也不能重命名此文件为my.ini,不然启动mysql服务会失败(报错信息如1067)。
  4. 填坑:将安装版mysql中的my.ini文件(文件内路径配置请根据自身需求进行调整)复制粘贴到my-default.ini文件的相同路径下,停止mysql服务,设置my.ini文件的lower_case_table_names=2,重启mysql服务,执行show variables like ‘lower%’;查看状态,完美解决!
  5. lower_case_table_names介绍

引用


含义

0

表和数据库名称使用CREATE TABLE or CREATE DATABASE语句中指定的letter case存储在磁盘上。名称比较区分大小写。你应该不会,如果你有不区分大小写的文件名(如Windows或Mac系统)的系统上运行MySQL这个变量设置为0。如果使用lower_case_table_names=0 不区分大小写的文件系统强制此变量为0 并MyISAM使用不同的字母表访问 表名,则可能导致索引损坏

1

表名以小写形式存储在磁盘上,名称比较不区分大小写。MySQL在存储和查找时将所有表名转换为小写。此行为也适用于数据库名称和表别名。

2

表和数据库名称使用CREATE TABLE or CREATE DATABASE语句中指定的letter case存储在磁盘上,但MySQL在查找时将它们转换为小写。名称比较不区分大小写。这仅适用于不区分大小写的文件系统! InnoDB表名和视图名以小写形式存储,如下所示 lower_case_table_names=1。

优缺点就不赘述了,很多博文都有介绍