根据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;
我要冒险猜测整个“collate=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/