mysql - 我读到 'rlike' 在 MySQL 中不区分大小写 - 但它对我来说不是这样工作的

标签 mysql case-sensitive case-insensitive

根据http://dev.mysql.com/doc/refman/5.1/en/regexp.html ,“REGEXP 不区分大小写,除非与二进制字符串一起使用。”嗯...我没有使用二进制字符串——至少,据我理解它们(以及它们在示例中暗示的那样)。然而...

mysql> select hostname from hosts where hostname regexp '17503a';
+-----------------------+
| hostname              |
+-----------------------+
| ccdn-ats-tk-17503a-01 |
| ccdn-ats-tk-17503a-02 |
+-----------------------+
2 rows in set (0.08 sec)

mysql> select hostname from hosts where hostname regexp '17503A';
+-------------------+
| hostname          |
+-------------------+
| ccdn-ss-17503A-01 |
| ccdn-ss-17503A-02 |
| ccdn-ss-17503A-03 |
| ccdn-ss-17503A-04 |
+-------------------+
4 rows in set (0.08 sec)

对我来说,这看起来非常像区分大小写的搜索。有什么帮助吗?

根据要求,这是(缩写)架构:

CREATE TABLE `hosts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `hostname` varchar(60) COLLATE utf8_bin DEFAULT NULL,
  `status` enum('active','decommissioned','offlined','deploy','down') COLLATE utf8_bin DEFAULT 'deploy',
  `onteak` int(10) DEFAULT NULL,
  `nagios` enum('monitored','unmonitored') COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `serial_num` (`serial_num`),
  UNIQUE KEY `ip` (`ip`),
  UNIQUE KEY `hostname` (`hostname`),
  KEY `fk_loc` (`loc`),
  KEY `hostname_idx` (`hostname`)
) ENGINE=MyISAM AUTO_INCREMENT=43075 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

我要冒险猜测整个“collat​​e=utf8_bin”是什么在咬我。谢谢!

更新:spencer7593 找到了解决方法——非常兴奋:

mysql> SELECT hostname FROM hosts WHERE hostname REGEXP '17503a' COLLATE utf8_general_ci ;
+-----------------------+
| hostname              |
+-----------------------+
| ccdn-ats-tk-17503a-01 |
| ccdn-ats-tk-17503a-02 |
| ccdn-ss-17503A-01     |
| ccdn-ss-17503A-02     |
| ccdn-ss-17503A-03     |
| ccdn-ss-17503A-04     |
+-----------------------+
6 rows in set (0.03 sec)

最佳答案

是的。 utf8_bin 是一个二进制排序规则,并且实际上区分大小写。

您可以尝试指定不区分大小写的排序规则;我已经通过相等比较完成了此操作,但从未尝试过使用 REGEXP ...

SELECT hostname FROM hosts WHERE hostname REGEXP '17503a' COLLATE utf8_general_ci ;
                                                          ^^^^^^^^^^^^^^^^^^^^^^^  

SELECT hostname FROM hosts WHERE hostname COLLATE utf8_general_ci REGEXP '17503a' ;
                                          ^^^^^^^^^^^^^^^^^^^^^^^

(旋转其中一个,看看它会产生多大的烟球。)

关于mysql - 我读到 'rlike' 在 MySQL 中不区分大小写 - 但它对我来说不是这样工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805038/

相关文章:

mysql - "create table"语句不工作,其他代码工作正常

mysql - MySQL 5.6 升级到 5.7 后数据无法再访问

java - Spring MVC 不区分大小写的 URL

c++ - 字符串的字典序比较[不区分大小写]

vb.net - 不区分大小写

java - Hibernate更新主键

mysql - 从mysql中的表中获取唯一结果

sql - 使用 IN 或文本搜索

sql - 如何执行区分大小写的嵌套 REPLACE 命令?

sql-server - SQL Server 中的 ORDER BY ... COLLATE