MySQL LIKE 匹配字符串末尾

标签 mysql sql-like

我试图弄清楚为什么这两个类似的语句被同等地评估。首先,我进行了一个简单的选择,返回 22 行。在第二个中,我期望我的更新/替换也应该返回受影响的 22 行。有人能看到我做错了什么吗?这些应该匹配诸如“I got a knee 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;

最佳答案

“受影响的行数”计数是已修改的行数,而不是匹配的行数。

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

可能有 22 行“匹配”,但不需要修改任何行。

如果该列是使用字符集/排序规则 latin1_swedish_ci 定义的,您可以尝试比较如下查询的结果:

SET @acro = _latin1'mri';

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

关于MySQL LIKE 匹配字符串末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26352874/

相关文章:

mysql - 在mysql查询中结合Not In和like函数

MySQL RegExp如何匹配任意位置的所有给定字母

MySql 更新。过程结果和phpmyadmin sql之间的区别

php - MySQL LIMIT 结果与 INNER JOIN 超过 2 个表

mysql - 优化 MySQL 查询以避免扫描大量行

php - 如何使用 PHP 和 Arduino IDE 通过 arduino 创建 AI?

sql - postgresql "SELECT title FROM table WHERE title ILIKE %keyword%"不使用 BTREE INDEX

MySQL 通配符查询

Mysql性能: How to store files tree in the database?

mysql - 使用 mysql concat 并使用 like 搜索该字段,这行得通吗?