是否有一个MySQL的等价物来替代php的Preg_Replace函数?
是否有一个MySQL的等价物来替代php的Preg_Replace函数?
我有一个有约500k行的表;varchar(255) UTF8列filename
包含一个文件名;
我试图从文件名中去除各种奇怪的字符 - 我想使用一个字符类:[^a-zA-Z0-9()_ .\-]
现在,在MySQL中有没有一个函数可以通过正则表达式进行替换?我正在寻找与REPLACE()函数类似的功能 - 简化示例如下:
SELECT REPLACE('stackowerflow', 'ower', 'over'); 输出:"stackoverflow" /* 是否有类似这样的函数存在? */ SELECT X_REG_REPLACE('Stackoverflow','/[A-Zf]/','-'); 输出:"-tackover-low"
我知道关于REGEXP/RLIKE,但它们只检查是否有匹配,而不是匹配的内容。
(我可以从PHP脚本中执行"SELECT pkey_id,filename FROM foo WHERE filename RLIKE '[^a-zA-Z0-9()_ .\-]'
",然后进行preg_replace
,最后"UPDATE foo ... WHERE pkey_id=...
",但这看起来是一个最后的慢而丑陋的解决方法)
有没有MySQL中与php的preg_replace相当的功能?
这个问题的出现原因是,用户想要在MySQL中实现类似于php的preg_replace的功能。
解决方法是,用户采取了以下步骤:
1. 导出表格 - 使用命令mysqldump -u user -p database table > dump.sql
导出表格。
2. 查找和替换 - 使用命令find /path/to/dump.sql -type f -exec sed -i 's/old_string/new_string/g' {} \;
在导出的文件中查找和替换指定的字符串。
3. 导入表格 - 使用命令mysqlimport -u user -p database table < dump.sql
导入修改后的表格。
如果用户想要确保字符串只出现在特定环境中,可以运行几个正则表达式来验证。此外,在运行替换之前,还可以创建备份以防止意外删除数据。
然而,其他用户对这种方法表示了担忧。他们认为这种方法风险很大,特别是对于大数据集或存在引用完整性的情况。删除数据然后重新插入数据会导致引用完整性关闭,实际上会导致数据库关闭。
所以,用户需要非常小心并确保要替换的字符串不会出现在其他地方。
虽然有些用户表示使用这种方法,但他们也指出了一些问题,比如当出现列数不匹配的错误时,整个数据库或表格会中断。
总结一下,用户最初选择以这种方式访问文件的原因是因为他们对上述提到的原因感到非常紧张。当时,将"找到文件"部分与"替换"部分分开似乎会使代码更易读,这也是用户提交代码之前的考虑。
在使用这种方法时,用户需要非常小心并确保正则表达式的准确性。