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)
我的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
| 归档时间: |
|
| 查看次数: |
22717 次 |
| 最近记录: |