zoukankan      html  css  js  c++  java
  • 记录一次关于linux Mysql数据库区分大小写的问题

    问题 : 在一个项目中,linux服务器上Mysql数据库建表时表名有大小写,导致项目查询表失败。

    MySQL表名不区分大小写的设置方法 

    mysql在windows系统下安装好后,默认是对表名大小写不敏感的,但是在linux下,一些系统需要手动设置。用root登录,打开并修改 /etc/my.cnf;

    在[mysqld]节点下,加入一行: lower_case_table_names=1。

    重启mysql服务service mysql restart

    本以为问题已经解决,却发现出现了另一个问题:

    大写的表名对应的表有找不到了,查了文章发现。

    lower_case_file_system是一个只读参数,无法被修改,这个参数是用来告诉你在当前的系统平台下,是否对文件名大小写敏感。

    lower_case_table_names为0时为大小写敏感,为1时为大小写不敏感。

    当你在lower_case_table_names=0时创建了大小写混合的表,且开启了innodb_file_per_table,此时创建出该表的数据文件名也是大小写混合的。

    若你需要启用lower_case_table_names=1,之前创建的混合大小写的表将提示不存在。因为你的sql都强制转换成了小写,无法找到有大写的表名了。

    解决方法:

    1先将数据库的配置改回去 lower_case_table_names=0

    2重启数据库

    3将项目用到的库导出去(.sql文件形式)

    4重新更改配置 lower_case_table_names=1

    5重启数据库

    6重新导入.sql文件 

    7大小写问题 解决

    参考文章:https://www.it610.com/article/5197747.htm

    mysql> show variables like '%lower%'

        -> ;
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_file_system | OFF   |
    | lower_case_table_names | 0     |
    +------------------------+-------+
    2 rows in set (0.00 sec)

    mysql> show variables like 'innodb_file_per_table';

    +-----------------------+-------+
    | Variable_name         | Value |
    +-----------------------+-------+
    | innodb_file_per_table | ON    |
    +-----------------------+-------+
    1 row in set (0.00 sec)
    可见我的lower_case_table_names 是0,innodb_file_per_table 是开启的

    mysql> use wzy
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A


    Database changed
    mysql> create table Test(col1 int);
    Query OK, 0 rows affected (0.17 sec)
    在这里创建的表名是首字母大写的

    [root@localhost wzy]# ls
    db.opt  Test.frm  Test.ibd
    [root@localhost wzy]# 
    [root@localhost wzy]# mkdir bak
    [root@localhost wzy]# cp Test.* bak/
    将数据文件先进行备份

    [root@localhost wzy]# service mysql stop
    Shutting down MySQL.. SUCCESS! 
    [root@localhost wzy]# vi /usr/etc/my.cnf 

    关闭mysql,并修改参数


    [root@localhost wzy]# mv Test.frm test.frm
    [root@localhost wzy]# mv Test.ibd test.ibd
    将数据文件换成小写名

    重新起库
    mysql> show variables like '%lower%'
        -> ;
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_file_system | OFF   |
    | lower_case_table_names | 1     |
    +------------------------+-------+
    2 rows in set (0.00 sec)
    此时的数据库是强制转小写的

    mysql> use wzy
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A


    Database changed
    mysql> show tables;
    +---------------+
    | Tables_in_wzy |
    +---------------+
    | test          |
    +---------------+
    1 row in set (0.00 sec)


    mysql> 
    在这里我们还能看到这张表



    mysql> desc test;
    ERROR 1146 (42S02): Table 'wzy.test' doesn't exist

    并不能打开,看来只是修改数据文件名,并不能完成表名的转小写

  • 相关阅读:
    单例类
    日期类2
    日历类
    日期转换类
    抓取网页内容并截图
    关于计时器与多线程
    让页面上图片不变形
    Thread 调用方法的方式
    语音放大缩小
    阻止Enter键回发到服务端Asp.net
  • 原文地址:https://www.cnblogs.com/erlou96/p/12742434.html
Copyright © 2011-2022 走看看