mysql low_case_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 databasetest05;

Query OK,1 row affected (0.00sec)

mysql> usetest05;Databasechangedmysql> create table tab01(id int); #以小写的名字创建了表.

Query OK,0 rows affected (0.05sec)

mysql> create table TAB01(id int); #以大写创建表名的时候,就报表存在了.

ERROR1050 (42S01): Table 'tab01' already existsmysql>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 databasetest05;

Query OK,4 rows affected (0.11sec)

mysql> create databasetest05;

Query OK,1 row affected (0.00sec)

mysql> usetest05;Databasechanged

mysql> create table tab01(id int);

Query OK,0 rows affected (0.05sec)

mysql> create table TAB01(id int);

Query OK,0 rows affected (0.08sec)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Ubuntu上设置MySQLlower_case_table_names参数无效可能是由于以下几个原因: 1. 参数设置错误:请确保在MySQL配置文件正确设置lower_case_table_names参数。可以通过编辑/etc/mysql/mysql.conf.d/mysqld.cnf文件来修改参数值。确保在[mysqld]部分添加或修改lower_case_table_names = 1,并重新启动MySQL服务。 2. 配置文件位置错误:在某些情况下,MySQL的配置文件可能位于不同的位置。可以通过运行以下命令来查找配置文件的位置:sudo find / -name "my.cnf"。然后在找到的配置文件进行相应的修改。 3. 参数冲突:如果在MySQL配置文件同时设置lower_case_table_names参数和其他与大小写相关的参数(如lower_case_file_system),可能会导致参数无效。请确保只设置lower_case_table_names参数,并将其他相关参数注释掉或删除。 4. 参数生效范围:lower_case_table_names参数只对新创建的表有效,对于已存在的表可能不会生效。如果需要将已存在的表名转换为小写,可以使用RENAME TABLE语句进行修改。 5. 数据库引擎限制:某些数据库引擎(如InnoDB)可能对lower_case_table_names参数有限制。请确保使用的数据库引擎支持该参数,并且已正确配置。 如果以上方法都无效,您可以尝试重新安装MySQL,并在安装过程正确设置lower_case_table_names参数。另外,您还可以查看MySQL的错误日志文件(通常位于/var/log/mysql/error.log),以获取更多关于参数设置无效的详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值