我试图找出为什么这两个相同的陈述被平等评估。首先,我做一个返回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;
答案 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()区分大小写但不喜欢。