2015-01-06 21 views
0

根据http://dev.mysql.com/doc/refman/5.1/en/regexp.html,“REGEXP不区分大小写,除非与二进制字符串一起使用”。那么......我不使用二进制字符串 - 至少,因为我理解他们(以及他们在他们的例子中暗示)。然而...我读过'rlike'在MySQL中不区分大小写 - 但它不适合我

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; 

而且我要出去的肢体和猜测,整个“整理= 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) 
+1

排序规则可能区分大小写,做一个SHOW CREATE TABLE hosts并检查整理 – Mihai

+0

请寄出'hosts'表的模式 –

回答

0

没错。 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' ; 
              ^^^^^^^^^^^^^^^^^^^^^^^ 

(给那些一抡之一,看到烟雾球它有多大使。 )

+0

先生,谢谢。这就像一个绝对的魅力: – user995746