基础知识收录(三)MYSQL大小写敏感

本文探讨了MySQL中角色名称的大小写敏感性问题,并详细介绍了如何通过调整字符集和校验规则来实现这一功能。文章还解释了不同级别的大小写敏感性控制,并提供了具体的SQL指令来修改字段使其大小写敏感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天游戏开发的时候,就判断玩家是否重名,发现了以前一直都没注意到的mysql大小写敏感
的问题
例子如下:
role_base表 `role_id`int(11), `role_name`varchar(32) 字符集:utf-8 校检规则utf8_general_ci
select * from role_base where role_name='BBc'
select * from role_base where role_name='bbc'
以上两条select语句结果都是一样

[color=blue]知识要点[/color]
[color=red]字符集和校检规则[/color]
在windows下用SQLyog,navicat等数据库管理工具,在创建表的时候,都会选项要求选择字符集和校检规则

字符集是一套符号和编码。有utf8 latin等
[img]http://dl2.iteye.com/upload/attachment/0115/9118/9ba5ad0c-23bb-329d-8420-481dce28971f.png[/img]

校检规则(下图中的核对)是在对应的字符集内比较字符的一套规则。_ci(大小写不敏感)
_cs(大小写敏感)_bin(二元)
[img]http://dl2.iteye.com/upload/attachment/0115/9120/014447ea-41a9-3d8f-8799-a3e7dbfe275c.png[/img]

一般情况下,sql的大小写敏感可分为如下几个级别
1:数据库:也就是数据库名,大小写敏感 参数lower_case_table_names控制
2:表: 表名,大小写敏感 参数lower_case_table_names控制(0敏感1不敏感)
在linux下 show variables like '%case%'查看
3:列名: 一般是不敏感(不过应该没人会设同样的字段名吧 :lol: )
4:字段内容:如果校检规则是_ci结束的大小写不敏感 _cs结束的大小写敏感

如果数据表的字符集为utf-8,校检规则为utf8_general_ci 那么role_name怎么修改为大小写敏感呢?

方法:
ALTER TABLE role_base MODIFY COLUMN `role_name` varchar(32) BINARY NOT NULL;
utf-8中貌似是没_cs的校检规则,可以用utf8_bin二进制来进行比较
修改后,其实可以看到role_name的属性为
`role_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值