mysql中参数low_case_table_name的使用?不同参数值的设置有什么影响?
mysql 设置 什么 参数 不同 Table 影响 name
2023-09-11 14:14:16 时间
需求描述:
今天一个同事问,在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
相关文章
- mysql索引总结(4)-MySQL索引失效的几种情况
- Linux别名设置导致mysql_config_editor配置登录报错
- mysql数据库中查看某个视图的定义的SQL语句
- Why isn't INFORMATION_SCHEMA not displayed in the MySQL Workbench UI by default?
- 报错:MySQL Access denied for user 'root'@'localhost' (using password: YES)
- 《MySQL系列》 不建议给MySQL设置Null值的原因?
- MySQL 常用语句
- centos7 安装 mysql
- Linux有问必答:如何通过命令行创建和设置一个MySQL用户
- Centos7通过yum安装最新MySQL
- 【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
- 【MySQL进阶-04】深入理解mysql事务本质(超级详解)
- Idea连接mysql数据库设置时区
- MySQL创建视图(CREATE VIEW)
- mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法
- Mysql查询数据时,自动为结果编上序号
- MySQL表记录的检索
- mysql远程连接 Host is not allowed to connect to this MySQL server
- MySql修改root密码、设置IP访问
- MySQL外键的设置及作用
- mysql分组取最大(最小、最新、前N条)条记录
- Mysql_mysql多个TimeStamp设置
- PHP+MySQL开发技术详解—学习笔记
- MySQL 跨服务器查询数据
- Go-MySQL-Driver:一个Go语言的轻量级极速的mysql驱动
- egg 连接mysql 在mysql 插入数据
- mysql建表设置格式
- MySQL不支持DELETE使用表别名?