MySQL中大小写敏感设置方法
admin
2023-05-16 19:22:18
0

本文主要给大家简单讲讲MySQL中大小写敏感设置方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL中大小写敏感设置方法这篇文章可以给大家带来一些实际帮助。

如果根据关键字case来搜索,会发现有两个参数。

mysql> show variables like '%case%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 0     |
+------------------------+-------+
2 rows in set (0.01 sec)

  其中第一个参数是系统路径是否大小写敏感,我们暂时跳过,看看第二个参数lower_case_table_names,它的含义 0:区分大小写,1:不区分大小写 。
  大小写的敏感问题,在MySQL大体会分为两种类别,在Linux和Windows平台。
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的: 
   1、数据库名与表名是严格区分大小写的; 
   2、表的别名是严格区分大小写的; 
   3、列名与列的别名在所有的情况下均是忽略大小写的; 
   4、变量名也是严格区分大小写的; 

而Windows下的MySQL却是大小写不敏感的,所有表名和数据库名都会变成小写。
比如我们创建表test_tab,然后插入两行记录,继续开启测试。

create table test_tab(id int,name varchar(64));
insert into test_tab values(1,'aa'),(2,'bb');

在默认的情况下,是开启了大小写敏感的,这样一来test_tab,TEST_TAB是完全不同的两个对象。

mysql> select id,name from TEST_TAB;
ERROR 1146 (42S02): Table 'test.TEST_TAB' doesn't exist
mysql> 
而在列级别,MySQL是不区分大小写的。
mysql> select id,NAMe from test_tab;
+------+---------+
| id   | NAMe    |
+------+---------+
|    1 | aa      |
|    2 | newtest |
+------+---------+
2 rows in set (0.00 sec)
如果要修改大小写敏感的设置,比如设置为大小写不敏感,需要设置参数值,然后重启。

mysql> set global lower_case_table_names=on;
ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable

  重启后,test_TAB和原来的test_tab就是一个意思了。
mysql> desc test_TAB;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(64) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
而如果在大小写敏感的情况下切换就很容易出现问题。

尤其需要注意这种兼容性的问题,如果对于存储过程等还存在疑虑,也可以开启测试模式。


delimiter //
drop procedure if exists `test_proc` //
create procedure test_proc(in push_id char(64))
begin
 update Test.test_tab set name='test' where id=2;
end
//
delimiter ;

mysql> call test_proc('newtest');
Query OK, 1 row affected (0.00 sec)

mysql> select *from test_tab;
+------+---------+
| id   | name    |
+------+---------+
|    1 | aa      |
|    2 | newtest |
+------+---------+
2 rows in set (0.00 sec)
在这个地方还是要做详细的验收测试,务必已测试结果为准,因为大小写的问题出现了表数据不可访问就很不应该了。

另外额外提一下Oracle里面的大小写问题,Oracle里面在11g有一个默认参数sec_case_sensitive_logon,这个参数的实际应用真是有些悲剧,一来很多客户对这个特性并不喜欢,看似从安全的角度来调控,但似乎带来了更多的问题,有相当一部分是习惯使然,而另外一方面是因为这个参数在11g推出,在12c里面这个参数就过期了,含义也发生了变化,在使用中会有一些理解上的歧义。

  这个参数只能够保证登录用户密码的大小写敏感,其他还是和原来一样,12c中这个参数变了味儿,在新版本中已经过期, 在设置的时候务必需要保证sqlnet.ora中的设置需要兼容,文件中的参数SQLNET.ALLOWED_LOGON_VERSION_SERVER如果是12,12a就需要保证SEC_CASE_SENSITIVE_LOGON不为false

MySQL中大小写敏感设置方法就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。       

相关内容

热门资讯

8年后回应姗姗来迟,真相还有人... 八年了,李小璐想起来回应“做头发”事件了。而且这次,她一次性抛出了不少新信息,表示广为流传的“做头发...
男子在攀岩馆从高空坠落,目击者... 8月2日中午,北京大型攀岩馆超级奥攀,一名男子从高空坠落,随后被送医治疗,多名网友发帖留言称确有此事...
小红书黑红启示录:旅游帖诈骗冲... #小红书旅游帖诈骗#冲上了热搜。一位妈妈带孩子在大连,沿着小红书攻略找那条海底隧道——满心想着给孩子...
天然气灶不打火怎么回事 可能由以下原因导致天然气灶不打火:1、燃气阀门未开启:检查气阀是否处于关闭状态。2、灶具没有点火:可...
空调遥控器按开关没反应 原因可能是遥控器里面的发光管损坏,导致屏幕不显示,可以维修或更换遥控器解决;原因可能是遥控器的红外发...
油烟机开关按了没反应 油烟机开关按了没反应油烟机开关按了没反应的原因有可能是开关按钮损坏;电源接头没有连接;电路板损坏、传...
马桶水箱按钮按不动 有因有:马桶按钮内的弹簧生锈老化;出水阀被泥沙等杂物卡住;水漂卡住了。需打开马桶水箱看看联动冲水阀连...
德意油烟机按不动怎么办 如果德意油烟机按不动,首先需要确认是否是电源问题。你可以检查油烟机的插头是否插紧了,插座是否正常工作...
台湾民众党已不是一人政党!柯文... 海峡导报综合报道 台湾民众党2日举办7周年党庆,创党主席柯文哲上台致辞时获得在场人士欢呼,声音久久不...
男子买到破损游泳“跟屁虫”,退... “几十块钱的东西还保你啥子命?这就是一个玩具!”7月22日,成都市民李先生向红星新闻反映,自己周末准...