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で、すべてのスペースを1つだけ置き換える方法はありますか?文字列の最初と最後からすべての空白を取り除きますか?

それ以外の場合は、すべてのレコードを調べて、常にphpで実行できます

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

しかし、それは私が想像するよりもはるかに多くの時間を必要とするでしょう (私は何百万ものレコードを持っています)

4

2 に答える 2

2

これは1回限りの操作であるため、レコードをテキスト形式(csv、sql inserts ..)にエクスポートし、正規表現をサポートする優れたテキストエディターに置き換えることができます。結局、regexprがそれほど完璧ではなかったときにバックアップを提供します。その後、新しいテーブルにインポートします。

コードで置換を行うと、置換を必要としないレコードを「%%」のようなフィールドで除外して処理を高速化できます。

最後になりましたが、データベースに書き込む前に、これらのレコードを書き込むサーバーコードを更新して、余分なスペースを除外する必要があります。

于 2012-04-24T21:53:09.923 に答える
0

MySQL での正規表現を使用したパターン マッチングの組み込みサポートのみがあります。http://www.mysqludf.org/lib_mysqludf_preg/などのユーザー定義関数を使用して、ニーズを解決することができます。

これはマルチバイト文字をサポートしていません。したがって、このソリューションでは、1 バイト文字エンコーディングに制限されます。

于 2012-04-24T21:37:47.067 に答える