踩坑记录:MySQL 查询不区分大小写
最近在使用 MySQL 数据库时遇到了一个问题,就是在进行查询时,MySQL 并不会区分查询条件中的大小写。 经过一番研究,发现这是 MySQL 的一个特性:**MySQL 默认使用的编码是 utf8mb4,在 utf8mb4 编码下,MySQL 默认情况下是不区分大小写的。**这是因为在 utf8mb4 编码下,大小写字母在二进制表示上是相同的,因此在进行比较时,MySQL 会忽略大小写。 所以无论在查询条件中使用的是大写字母、小写字母还是混合字母,MySQL 都会将其视为相同的查询条件。 解决方案: 使用 COLLATE 关键字来指定查询时的字符集。 具体来说,我们可以将查询条件中的字符串转换为特定的字符集,以便在查询时进行区分。例如,我们可以使用以下语句来进行查询: SELECT * FROM table WHERE column COLLATE utf8mb4_bin = 'SearchString'; // SELECT * FROM table WHERE column COLLATE utf8_bin = 'SearchString'; 使用 BINARY 运算符 SELECT * FROM table WHERE BINARY column = 'SearchString'; COLLATE 和 BINARY 运算符在 MySQL 中的效率都比较高。COLLATE 关键字通常用于对特定列或查询进行设置,而 BINARY 运算符通常用于对整个查询进行设置。 在使用 COLLATE关键字时,由于会对查询条件进行字符集转换,因此可能会稍微降低一些查询性能。但是,这种性能下降通常是可以忽略不计的。在实际使用中,我们可以先尝试使用 COLLATE关键字,如果查询性能不足,再考虑使用其他优化策略。 在使用 BINARY运算符时,由于不需要进行字符集转换,因此查询性能通常比使用 COLLATE关键字要高一些。但是,这种性能优势也是非常小的,通常不会对查询性能产生重大影响。 ...