千家信息网

MySQL中的大小写有区别吗

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,本篇内容介绍了"MySQL中的大小写有区别吗"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果根据关
千家信息网最后更新 2024年11月20日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中的大小写有区别吗"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

大小 参数 问题 情况 数据 测试 别名 数据库 更多 保证 一来 两个 内容 含义 实际 知识 过程 还是 不同 学有所成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全社保 深圳软件开发工资标准 中科创达网络安全 专网 内外网隔离 网络安全 web服务器自动推送数据 5g网络安全关键技术 阿里数据库数据库 isoiec网络安全体系 徐红计算机网络技术基础课件 ij软件开发 白衣科技网络技术有限公司 数据库恢复是将数据库 联友科技软件开发工程师面试 湖南常见网络技术的技术开发 浙江 金融 软件开发 网络安全模式复制文件卡死不动了 普陀区创新软件开发厂家销售价格 服务器和家用机一样吗 wapi网络安全协议 神经网络技术框架教程 b站软件开发怎么样 陕西服务器机柜价格实惠 使用什么储存过程可以修改数据库 浙江专业软件开发哪家好 联友科技软件开发工程师面试 数据库查询的方法 嵌套 思科网络技术学院教材 基础 php 刷新更新的数据库 新琦和雅奇软件开发有什么区别 做软件开发外企和私企怎么选
0