zoukankan      html  css  js  c++  java
  • linux系统下MySQL表名区分大小写问题

     问题如下:

    比如上图中的PERSON表,查询SQL语句中如果表名是小写,就会报错说person表不存在。

    因为Linux环境下的MySQL数据库的表名默认是区分大小写的,可以查看Linux上的MySQL的配置文件/etc/my.cnf:

    [root@VM_219_131_centos tomcat7]# cat /etc/my.cnf 
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    [root@VM_219_131_centos tomcat7]# 

    如果要使用数据库表名不区分大小写的话,就需要在[mysqld]下面添加一行配置,即 lower_case_table_names=1:

    [root@VM_219_131_centos tomcat7]# vi /etc/my.cnf 
    [mysqld]
    lower_case_table_names=1
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid

    网上对该项配置的说明:

    lower_case_table_names参数详解:
    
    其中 0:区分大小写,1:不区分大小写
    
    MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
    
    1、数据库名与表名是严格区分大小写的;
    
    2、表的别名是严格区分大小写的;
    
    3、列名与列的别名在所有的情况下均是忽略大小写的;
    
    4、变量名也是严格区分大小写的;
    
    MySQL在Windows下都不区分大小写。
    
    3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:
    
    A、创建时设置:
    
    CREATE TABLE T(
    
    A VARCHAR(10) BINARY
    
    );
    
    B、使用alter修改:
    
    ALTER TABLE`tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
    
    C、mysql tableeditor中直接勾选BINARY项。

    修改完配置之后,一定要重启数据库:

    [root@VM_219_131_centos tomcat7]# service mysqld restart
    Stopping mysqld:  [  OK  ]
    Starting mysqld:  [  OK  ]

    然后使用Navicat工具重新连接MySQL数据库,再次查询perosn表,这时发现不管查询SQL语句中的表名是大写还是小写都提示找不到person表了。

    原因是修改配置之后,会导致原来的大写的表名PERSON无法识别,所以这一点要特别注意。

    解决办法是:

    (1)在修改配置之前一定先将所有表的表结构和表数据导出做备份;

    (2)删除原来的表;

    (3)修改配置;

    (4)将表结构和表数据导入。

    按照上面的步骤操作之后,再次查询person表,表名就不区分大小写了。

     

  • 相关阅读:
    Android 按键消息处理Android 按键消息处理
    objcopy
    SQLite多线程读写实践及常见问题总结
    android动画坐标定义
    Android动画效果translate、scale、alpha、rotate
    Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/trunkslisa/p/9462050.html
Copyright © 2011-2022 走看看