我有一個查詢删除所有特殊字元.
但是,一個空格在電子郵件字元串末尾抵制該查詢.
示例:’[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中處理特殊字元.我想直接使用SET和replace,trim()函數更新每封電子郵件.
但是,有些空格不會被删除,我不知道為什麼.
我的表有大約1,200萬行.我編寫了一個CRON來擷取它們以删除所有特殊字元(不幸的是因為在過去我們沒有在INSERT上檢查它們).
是以我建構了這個查詢來處理我的12 MM行.除了正确的空白外,它的工作效果非常好(有時它有時不被删除).我想在Workbench上添加它,查詢始終100%工作.它沒有任何意義.
這是我的查詢再次沒有反斜杠和我的IN 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個ID.
我認為正确的空格是一個不間斷的空間,但我在查詢中使用CHAR(160)的最後一次測試不起作用.