MySQL LIKE匹配在字符串的末尾

时间:2014-10-14 04:54:06

标签: mysql sql-like

我试图找出为什么这两个相同的陈述被平等评估。首先,我做一个返回22行的简单选择。在第二个,我期待我的更新/替换也应该返回22行受影响。任何人都可以看到我做错了什么吗?这些应该匹配像&#34这样的字符串;我有一个膝盖mri"。

SET @acro = 'mri';

SELECT title FROM mytable WHERE title LIKE concat('% ', @acro);

//返回n行

UPDATE mytable
SET title = REPLACE(title, CONCAT(' ', @acro), CONCAT(' ', UPPER(@acro)))
WHERE title LIKE CONCAT('% ', @acro);

//返回0行

CREATE TABLE `mytable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` text,
  `author` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=119232 DEFAULT CHARSET=utf8;

2 个答案:

答案 0 :(得分:0)

"行受影响" count是已修改的行数,而不是匹配的行数。

一种解释是列标题使用不区分大小写的排序规则,即名称以_ci结尾的字符集。

可能有22行匹配"但是没有行需要修改。

如果使用字符集/整理latin1_swedish_ci定义列,您可以尝试比较查询结果,如下所示:

SET @acro = _latin1'mri';

SELECT title
  FROM mytable 
 WHERE title COLLATE latin1_general_cs LIKE UPPER(CONCAT('% ', @acro));
                                   ^^^

答案 1 :(得分:0)

啊,这里的答案是:MySQL Update query with LIKE in WHERE clause not affecting matching rows

Replace()区分大小写但不喜欢。