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

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

  • 相关阅读:
    vue 实现返回上一页不请求数据keep-alive
    vue+webpack 实现懒加载的三种方式
    深度解析使用CSS单位px、em、rem、vh、vw、vmin、vmax实现页面布局
    vue2.0中 怎么引用less?
    vue 自定义 提示框(Toast)组件
    Flex 布局教程实例
    Vue.js经典开源项目汇总
    Vue插件编写、用法详解(附demo)
    vue 项目 使用sass以及注意事项
    vue2.0+vue-video-player实现hls播放的案例
  • 原文地址:https://www.cnblogs.com/erlou96/p/12742434.html
Copyright © 2011-2022 走看看