MySQL中不区分大小写的REPLACE?

dka*_*arp 27 mysql replace

MySQL在默认排序规则下运行几乎所有字符串比较...除了REPLACE命令.我有一个不区分大小写的排序规则,需要运行不区分大小写的REPLACE.有没有办法强制REPLACE使用当前的排序规则而不是总是进行区分大小写的比较?我愿意升级我的MySQL(目前运行5.1)以获得更多功能......

mysql> charset utf8 collation utf8_unicode_ci;
Charset changed

mysql> select 'abc' like '%B%';
+------------------+
| 'abc' like '%B%' |
+------------------+
|                1 |
+------------------+

mysql> select replace('aAbBcC', 'a', 'f');
+-----------------------------+
| replace('aAbBcC', 'a', 'f') |
+-----------------------------+
| fAbBcC                      |   <--- *NOT* 'ffbBcC'
+-----------------------------+
Run Code Online (Sandbox Code Playgroud)

小智 19

如果replace(lower())不起作用,则需要创建另一个函数.

  • 我需要保留原始字符串的未替换剩余部分的情况,所以没有. (7认同)

san*_*zti 8

我的2美分.

由于很多人已经从MySQL升级到MariaDB,所以人们将拥有一个名为的新功能REGEXP_REPLACE.像正常替换一样使用它,但模式是正则表达式.

这是一个有效的例子:

UPDATE `myTable`
SET `myField` = REGEXP_REPLACE(`myField`, '(?i)my insensitive string', 'new string') 
WHERE `myField` REGEXP '(?i)my insensitive string'
Run Code Online (Sandbox Code Playgroud)

该选项(?i)使所有后续匹配不区分大小写(如果放在模式的开头,就像我一样,那么它都是不敏感的).

有关更多信息,请参见此处:https://mariadb.com/kb/en/mariadb/pcre/

编辑:从MySQL 8.0开始,您现在也可以使用该regexp_replace功能,请参阅文档:https://dev.mysql.com/doc/refman/8.0/en/regexp.html