0

我的数据库中有很多包含过多空格的记录:

to buy  books is  like to buy
bad   journalists  aren't taken   hostage
  for your   information  this isn't    what we do

有没有办法在(My)SQL中 - 用一个替换所有空格 - 从字符串的开头和结尾去除所有空格?

否则我总是可以在 php 中做到这一点,通过查看所有记录

$cleaned = trim(preg_replace('/\s+/', ' ', $string));

但这需要我想象的更多时间(我有数百万条记录)

4

2 回答 2

2

由于这是一次性操作,您可以将记录导出为某种文本格式(csv、sql 插入..)并用支持正则表达式的良好文本编辑器进行替换。当您的正则表达式毕竟不是那么完美时,为您提供备份。之后导入到新表中。

当您以代码方式进行替换时,您可以过滤掉不需要替换的记录,例如“where field like "% %"”以加快处理速度。

最后但并非最不重要的一点是,您必须更新写入这些记录的服务器代码,以在写入数据库之前过滤掉多余的空格。

于 2012-04-24T21:53:09.923 回答
0

在 MySQL 中,只有使用正则表达式对模式匹配的内置支持。可以使用用户定义的函数,例如http://www.mysqludf.org/lib_mysqludf_preg/来解决您的需求。

这个不支持多字节字符。因此,您只能使用此解决方案进行单字节字符编码。

于 2012-04-24T21:37:47.067 回答