mysql唯一索引大小写_mysql存储 单词 区分大小写问题

为防止链接失效,特在此补充一楼回答:

详解MySQL查询时区分字符串中字母大小写的方法

MySQL默认是不区分大小写的,这个涉及到collate字符集与校验规则方面的知识,下面会讲到,这里我们就来详解MySQL查询时区分字符串中字母大小写的方法.

如果你在mysql有唯一约束的列上插入两行值'A'和'a',Mysql会认为它是相同的,而在oracle中就不会。就是mysql默认的字段值不区分大小写?这点是比较令人头痛的事。直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。

通过查询资料发现需要设置collate(校对) 。

collate规则:

*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的

*_cs: case sensitive collation,区分大小写

*_ci: case insensitive collation,不区分大小写

关于字符集与校验规则,mysql能:

1、使用字符集来存储字符串,支持多种字符集;

2、使用校验规则来比较字符串,同种字符集还能使用多种校验规则来比较;

3、在同一台服务器、同一个数据库或者甚至在同一个表中使用不同字符集或校对规则来混合组合字符串;

4、可以在任何级别(服务器、数据库、表、字段、字符串),定义不同的字符集和校验规则。

强制区分大小写,可以通过binary关键字,方法有两种:

让mysql查询时区分大小写

select * from usertable where binary id='AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h';

// 下面的 SELECT 语句演示了在通常不区分大小写的表上进行区分大小写搜索的一种技术。

// 出自 :p260

SELECT * FROM customers ORDER BY lasename,firstname COLLATE latin1_general_cs;

在建表时加以标识

create table `table`(

`id` varchar(32) binary,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `table` (

`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

7e4154221f6b5173d5b1e6250222b208.png

在mysql中,存在大小写问题的地方还有:

(1) 关键字: 不区分大小写 select from table_name 和 select from table_name 效果是一样的

(2) 标示符(如数据库名称和表名称):不区分大小写。如存在表users,那么select from users和select from uSers 效果一样。网上说这跟操作系统有关,在所有Unit操作系统(除了使用HFS+的Mac OS 之外)上都是区分大小写的,而在windows上是不区分大小写的。(网上的这一说法没有验证过,我在windows server2003上是不区分大小写的)

(3) 表的别名:不区分大小写 select m.* from users m where M.username = 'aa';

(4) 列的别名:不区分大小写 select uname from (select username as uname from users where id = 768) ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值