mysql大小写敏感配置

2021/9/28 19:11:01

本文主要是介绍mysql大小写敏感配置,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

mysql大小写敏感配置相关的两个参数,lower_case_file_system 和 lower_case_table_names。

查看当前mysql的大小写敏感配置

show global variables like '%lower_case%';

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 0     |
+------------------------+-------+

# lower_case_file_system
# 表示当前系统文件是否大小写敏感,只读参数,无法修改。

# ON  大小写不敏感
# OFF 大小写敏感

# lower_case_table_names
# 表示表名是否大小写敏感,可以修改。

# lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
# lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。

设置lower_case_table_names的值

# 打开my.cnf文件,加入以下语句后重启。
lower_case_table_names = 0 或 lower_case_table_names = 1

测试lower_case_table_names为0和1时的不同情况

创建表 user

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 设置lower_case_table_names = 0

    # 表名与创建时大小写一致
    select count(*) from user;
    
    +----------+
    
    | count(*) |
    
    +----------+
    
    |        0 |
    
    +----------+
    
    # 表名与创建时大小写不一致
    
    select count(*) from User;
    
    ERROR 1146 (42S02): Table 'user.User' doesn't exist
    

    lower_case_table_names=0时,表名大小写敏感。

  • 设置lower_case_table_names = 1
    表名与创建时大小写一致

    select count(*) from user;
    +----------+
    
    | count(*) |
    
    +----------+
    
    |        0 |
    
    +----------+
    

    表名与创建时大小写不一致

    select count(*) from User;
    +----------+
    
    | count(*) |
    
    +----------+
    
    |        0 |
    
    +----------+
    

    lower_case_table_names=1时,表名大小写不敏感

  • 设置lower_case_table_names=1时,原来在lower_case_table_names=0时创建的表提示不存在的解决方法

    # 在lower_case_table_names=0时使用大小写混用创建表名,
    # 再设置lower_case_table_names=1后,原创建的表使用时会提示不存在。
    

    首先设置lower_case_table_names=0
    创建表 User(大小写混用)

    CREATE TABLE `User` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    
      `name` varchar(20) NOT NULL,
    
      PRIMARY KEY (`id`)
    
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    show tables;
    
    +----------------+
    
    | Tables_in_user |
    
    +----------------+
    
    | User           |
    
    +----------------+
    

    再设置lower_case_table_names=1
    执行查询,不管表名是大写还是小写,都提示表不存在

    select * from User;
    ERROR 1146 (42S02): Table 'user.user' doesn't exist
    
    select * from user;
    
    ERROR 1146 (42S02): Table 'user.user' doesn't exist
    
    select * from USER;
    
    ERROR 1146 (42S02): Table 'user.user' doesn't exist
    


这篇关于mysql大小写敏感配置的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程