预设 MySQL 的表和 query 是不分大小写的。 (对,并不是所有资料库都这样)
举个例子,下面有张表 records 两笔资料 code
大小写不同。
id | code |
---|---|
1 | f23b |
2 | F23b |
SELECT * FROM records WHERE code = 'F23B';
执行结果如下,两笔资料都会被捞到,表示 MySQL 不会去区分大小写的不同!
mysql> select * from records where code = 'F23B';
+----+------+
| id | code |
+----+------+
| 1 | f23b |
| 2 | F23b |
+----+------+
2 rows in set (0.00 sec)
在要区分大小写的条件栏位前加上 BINARY
就可以解决
SELECT * FROM records WHERE BINARY code = 'F23B';
执行结果如下,因为没有完全匹配的纪录,所以捞出 0 笔资料
mysql> select * from users where binary code = 'F23B';
Empty set (0.00 sec)
在 Laravel 中就会是这样下:
$code = "F23B";
$records = Record::whereRaw('BINARY `code` = ?', $code)->get();
另外,如果要把大小写不同但字母一样的字串当作 primary key ,在写入资料库时也会有问题。例如,f23b
和 F23b
就会被视为是一样的,所以会写入失败。
BINARY
is a built-in keyword that after yourWHERE
clause that forces a comparison for an exact case-sensitive match.As a side note, you can also make columns case-sensitive by adding the
BINARY
keyword when you create your table.
这段忘记当初是在哪串讨论节录的,但我觉得讲的很清楚。
总之 MySQL 预设是 non case sensitive;如果有需求,可以在搜寻或创建表时就特别设定。
另外,并不是每个资料库软件都是这样,像 Oracle 就是 case sensitive。可以看看这篇,有很清楚的比较!
<<: 前端工程师也能开发全端网页:挑战 30 天用 React 加上 Firebase 打造社群网站|Day4 制作标题导览列
>>: 铁人赛 Day4 -- 一定要知道的 CSS (一)
今天的笔记应该算是日常初阶工程师会发生的问题,以及可以怎麽去找根因的一些做法,不外乎就是下好关键字,...
终於结束了!! 一开始以为 30 天可以咻的一声就过去了 没想到真的十分的不容易呀 更尤其是这中间居...
前言 专案管理是一门很深的学问,也不只是软件业,各行各业都有,最早是来自土木建筑、国防领域。 牵扯到...
目前 Redis 几乎已成为後端微服务架构的必备基础设施,但是 Ktor 官方连 ORM 都没有整合...
前言 接着昨天分享的话题,针对成为 Scrum Master 的经历与想法再进行补充。 大家从标题「...