• 【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)


     系列目录

    一、安装MySql

    二、安装并破解Navicat

    三、没有my.in配置文件怎么办

    四、设置MySql的大小写敏感

    五、重置MySql登陆密码


    这一篇可以说是我的踩坑的血泪史了。。。

     

    MySql在Windows下默认是大小写不敏感的,当表名中有大写字母的时候,MySql会直接把它转化成小写之后存储。

     

    如果想要设置大小写敏感,方法网上一搜一大把,整体思路是:

     

    在MySql的程序目录下有一个配置文件叫“my.ini”

    我们只需要用记事本打开它,然后在[mysqld]标记下添加一行代码:

    lower_case_table_names = 0

    保存之后重启MySql服务就可以了。

     

    思路很清晰,步骤看着也很简单,但是这里面遍布的大大小小无数的坑。。。下面我就来挨个踩踩填填~

      坑No.1:MySql程序文件夹下没有my.ini文件

    这里有两种情况,跟安装MySql的方式有关。

     

    针对Windows系统,MySql官网(https://dev.mysql.com/downloads/mysql/)给了两种安装方式:

    一种是下载MSI安装,这种安装模式和一般的软件安装程序一样,运行之后系统会有一个引导程序,你只需要一直点击“下一步”就能安装完成;

    另一种是下载ZIP文件安装,这种方式下载解压之后,解压出来的文件就是MySql程序本身,不需要执行安装程序,可以直接使用。

    针对第一种情况,MSI安装,安装之后系统是会自动生成my.ini配置文件的,如果在主程序文件目录找不到,那么可以去你安装MySql的磁盘下的ProgramData文件下找找,一般的默认路径是:

    C:ProgramDataMySQLMySQL Server 8.0my.ini

    这我很早之前装的版本,位置是这样的:

    针对第二种,ZIP安装,这种安装模式是没有my.ini配置文件的。。。需要自己新建一个my.ini文件,然后绑定到MySql服务。

    具体怎么新建怎么绑定,可以参考前一章内容“三、没有my.in配置文件怎么办”,这一章主要讲采坑,细节就不讲了~

      坑No.2:到底是0、1还是2

    my.ini下设置大小写敏感的语句是:

    lower_case_table_names = x

    这里的x到底应该写0还是1还是2?

    网上这三种版本都有,还有说是跟MySql的版本有关的。

     

    其实,0,1,2这三个数字全都是合法的,而且它们所代表的意思都不一样:

    #If set to 0, table names are stored as specified and comparisons are case sensitive.   
    #If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive.   
    #If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases.  
    lower_case_table_names = 2

    简单说,就是;

    0:存储和比较都是大小写敏感的,比如:新建一张表叫“TestTable”,再建一张表叫“testtable”也是可以的
    
    1:大小写不敏感,新建的时候系统会同意转化成小写
    
    2:存储大小写敏感,但是比较的时候会转化为小写比较,比如:新建一张表叫“TestTable”,显示的时候是大小写都有的,但是当再新建一张“testtable”的时候就会报错,因为比较是统一转换成小写比较的。

    如果想设置大小写敏感的话,个人建议,尽量不要使用0,而使用2。

    当然,有特殊需求的话,非要使用0也是可以的。

      坑No.3:在my.ini添加了大小写敏感之后无法启动MySql服务

    这一个应该是最大的坑了。

    当在my.ini文件下添加“lower_case_table_names = 2”后,重启服务,却显示:

    或者是这样:

    然后,把这行设置从my.ini删除之后,就又可以启动服务了。

    明明是按照网上说的步骤一步一步来的,怎么就报错了呢?

    最后被逼无奈,只能去翻MySQl的官方文档。

    然后就发现了下面这段话:

    lower_case_table_names can only be configured when initializing the server. 
    Changing the lower_case_table_names setting after the server is initialized is prohibited.

    意思是大小写敏感只能在安装MySql初始化之前设置,之后是不行的。。。

     

    解决办法是要先删除服务,然后在my.ini文件下编辑好大小写敏感设置,编辑好之后再去使用这个my.ini文件安装初始化MySql(详细步骤在前一章“三、没有my.in配置文件怎么办”)

    最后,终于设置成功:

    BTW,可能是因为MySql版本不同原因,我的另一台电脑在my.ini下添加了大小写敏感之后,重启服务竟然直接成功了,然直接成功,直接成功了,接成功了,成功了,功了,了。。。

    唉踩坑踩的太累,已然没有心情再去关注到底哪个版本需要哪个版本不需要。。。

    先这样吧,希望看到这篇文章的人以我为鉴,不要再像我一样被坑了~

  • 相关阅读:
    深度优先和广度优先搜索
    宏定义
    C++11新特性之七——final/override控制
    __declspec的用法
    zedboard学习(1)OLED驱动显示图像
    python+NLTK 自然语言学习处理三:如何在nltk/matplotlib中的图片中显示中文
    流畅python学习笔记第十八章:使用asyncio编写服务器
    流畅python学习笔记第十八章:使用asyncio包处理并发(二)
    Django之博客系统:自定义认证
    Django之博客系统:用户注册和Profile
  • 原文地址:https://www.cnblogs.com/RayWang/p/9264390.html
Copyright © 2020-2023  润新知