我有一个查询删除所有特殊字符。
但是在电子邮件字符串的末尾有一个空格阻止该查询。删除不间断空间?
例子:'[email protected] '
UPDATE my_table SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),\'\x0B\',\'\'),\'\0\',\'\'),\'\t\',\'\'),\'\r\',\'\'),\'\n\',\'\'),\'\r\n\',\'\'),\'\n\r\',\'\'),\' \',\'\'),CHAR(160),\'\') WHERE id=X
为什么?
我用这个说法,因为我有一个WHERE id IN()
,所以我不想在PHP处理特殊字符。我想UPDATE
每个电子邮件直接与SET
和replace
,trim()
功能。
但是,一些空白不会被删除,我不知道为什么。
我的表格大约有12百万行。我编写了一个CRON,让他们删除所有特殊字符(不幸的是,因为过去我们没有在INSERT
上检查它们)。
所以我建立了这个查询来处理我的12MM行。除了正确的空白(有时它有时不会被删除),它的工作非常好。我想补充一点,在Workbench上,查询始终工作100%。它没有任何意义。
这是我再次查询没有反斜线和我where IN
:
UPDATE NEWSLETTER_SUBSCRIPTION SET email= REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(LTRIM(RTRIM(email))),'\x0B',''),'\0',''),'\t',''),'\r',''),'\n',''),'\r\n',''),'\n\r',''),' ',''),CHAR(160),'') WHERE id IN (' . implode(',', $idEmailToBeProcess) . ')
$idEmailToBeProcess
包含约500 IDS。
我认为正确的空格这是一个非换空间,但我与我的查询CHAR(160)
最后一次测试没有工作。
为什么不使用专门为此任务构建的函数,无论您使用何种语言创建查询? IE浏览器。在PHP中有[trim](http://www.php.net/manual/en/function.trim.php)。 – tenub
你的母语是什么? PHP?不知道为什么你会努力做出丑陋的嵌套SQL语句,当你可以在php中使用像'preg_replace'这样的事情一次完成。 – brandonscript
@tenub虽然在替换嵌套中间有三个修剪。 – Jerry