zoukankan      html  css  js  c++  java
  • mysql中参数low_case_table_name的使用?不同参数值的设置有什么影响?

    需求描述:

      今天一个同事问,在mysql中,默认的表名是大小写区分的吗,默认是什么设置,

      如果要设置成大小写不区分的改怎么设置,是否需要进行重启.然后就进行了查询,

      对于lower_case_table_names进行了实验,对该参数的作用进行理解.

    操作过程:

    1.查看默认的lower_case_table_names

    mysql> show variables like 'lower_case_table_names';
    +------------------------+-------+
    | Variable_name          | Value |
    +------------------------+-------+
    | lower_case_table_names | 0     |
    +------------------------+-------+
    1 row in set (0.00 sec)

    备注:该参数的默认值是0.

    2.查看默认的情况,该参数对表名有什么影响

    mysql> create database test05;
    Query OK, 1 row affected (0.00 sec)

    mysql> use test05;
    Database changed
    mysql> create table tab01(id int); #以小写创建表
    Query OK, 0 rows affected (0.05 sec)

    mysql> create table TAB01(id int); #以大写创建表
    Query OK, 0 rows affected (0.04 sec)

    mysql> show tables; #通过show variables可以查看表名是通过指定的大小写进行存储,即区分大小写.
    +------------------+
    | Tables_in_test05 |
    +------------------+
    | TAB01            |
    | tab01            |
    +------------------+
    2 rows in set (0.00 sec)

    mysql> system ls -l /mysql/data/test05 #查看操作系统表对应的文件,也是大小写区分的.
    total 220
    -rw-r----- 1 mysql mysql    61 Jun  5 15:37 db.opt
    -rw-r----- 1 mysql mysql  8556 Jun  5 15:37 tab01.frm
    -rw-r----- 1 mysql mysql  8556 Jun  5 15:37 TAB01.frm
    -rw-r----- 1 mysql mysql 98304 Jun  5 15:37 tab01.ibd
    -rw-r----- 1 mysql mysql 98304 Jun  5 15:37 TAB01.ibd

    mysql> insert into tab01 select 1; #插入的时候,可以分别向两张表中插入数据
    Query OK, 1 row affected (0.02 sec)
    Records: 1  Duplicates: 0  Warnings: 0

    mysql> insert into TAB01 select 1;
    Query OK, 1 row affected (0.00 sec)
    Records: 1  Duplicates: 0  Warnings: 0

    mysql> select * from tab01; #查询两张表有不同的值.
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)

    mysql> select * from TAB01;
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)

    备注:在默认情况下,表名是以指定的方式进行存储的,即大小写区分.

    2.将lower_case_table_names修改为1,重启实例

    [root@testvm ~]# grep "lower" /etc/my.cnf
    ### table_name lower case
    lower_case_table_names = 1

    备注:由于lower_case_table_names是全局参数,并且是非动态的,只能在配置文件中配置,重启生效.

    3.查看lower_case_table_names设置为1之后,对表名的影响

    mysql> create database test05;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use test05;
    Database changed

    mysql> create table tab01(id int); #以小写的名字创建了表. Query OK, 0 rows affected (0.05 sec) mysql> create table TAB01(id int); #以大写创建表名的时候,就报表存在了. ERROR 1050 (42S01): Table 'tab01' already exists mysql> show tables; #表名以小写存储 +------------------+ | Tables_in_test05 | +------------------+ | tab01 | +------------------+ 1 row in set (0.00 sec)

    mysql> drop table tab01; #删除表,以大写名字创建表.
    Query OK, 0 rows affected (0.08 sec)

    mysql> create table TAB01(id int);
    Query OK, 0 rows affected (0.05 sec)

    mysql> show tables; #表名以小写存在
    +------------------+
    | Tables_in_test05 |
    +------------------+
    | tab01            |
    +------------------+
    1 row in set (0.00 sec)

    备注:将lower_case_table_names设置为1的时候,表名是以小写存储的,在系统上也是小写的名字.

    3.将lower_case_table_names设置为2,重启实例

    [root@testvm data]# grep "lower" /etc/my.cnf
    ### table_name lower case
    lower_case_table_names = 2

    备注:将lower_case_table_names设置为2

    4.查看设置为2之后的影响

    mysql> drop database test05;
    Query OK, 4 rows affected (0.11 sec)
    
    mysql> create database test05;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> use test05;
    Database changed
    mysql> create table tab01(id int);
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> create table TAB01(id int);
    Query OK, 0 rows affected (0.08 sec)
    
    mysql> show tables;
    +------------------+
    | Tables_in_test05 |
    +------------------+
    | TAB01            |
    | tab01            |
    +------------------+
    2 rows in set (0.00 sec)

    mysql> system ls -l /mysql/data/test05 #操作系统上文件的名字,以区分大小写的方式存储.
    total 220
    -rw-r----- 1 mysql mysql    61 Jun  5 16:36 db.opt
    -rw-r----- 1 mysql mysql  8556 Jun  5 16:37 tab01.frm
    -rw-r----- 1 mysql mysql  8556 Jun  5 16:37 TAB01.frm
    -rw-r----- 1 mysql mysql 98304 Jun  5 16:37 tab01.ibd
    -rw-r----- 1 mysql mysql 98304 Jun  5 16:37 TAB01.ibd

    备注:设置为2之后,表名是以区分大小写的方式存储的.

    文档创建时间:2018年6月5日16:38:40

  • 相关阅读:
    Servlet项目 创建方法
    1. 连接数据库
    Jsp application对象(全局变量)
    Jsp session属性、方法
    让python 3支持mysqldb的解决方法
    Python读写文件(进阶)
    python操作MongoDB
    使用Python Pandas处理亿级数据
    SurfingTheInternet
    matplotlib中日期显示(不显示为科学计数法)
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/9140534.html
Copyright © 2011-2022 走看看