2012-03-15 3 views
0

私はMySQLテーブルのフィールドに文字列を持っています。MySQL:フィールド内の空白文字は、実際には空白ではありません。それは何ですか?

これはVARCHARです。テーブルのエンコードはutf8です。

フィールドの内容は、私がselect * from table where content like '%one two%';を実行すると、行が返されone two three

です。
しかし、update table set content = REPLACE(content, " ", "+;;");を実行すると、結果はone two+;;threeになります。

その最初の「空白」文字は何ですか?

私はRuby on Railsアプリケーションでこのテーブルを使用しています。 Rubyはそれを空白文字としても認識しません。 (たとえば、文字列を ""に分割した場合、最初のスペースで分割されません)

何が起こっているのでしょうか?

ありがとうございました。

+0

Railsコンソールのデータベースからその文字列を引き出し、 'your_string.bytes'を見てください。 –

+0

"bad"スペースをbytes.to_aに変換するのは[194、160]です。 「良い」スペースは[32] – johnnycakes

+0

です。これは、Arjanが話している0xC2 0xA0です。 –

答えて

2

おそらく、改行なしの文字(UTF8では2バイト:0xC2 0xA0)です。それは宇宙ではなく、それを空間と比較することは偽をもたらすでしょう。

あなたはそうのようなあなたのテーブルを更新することができます。あなたが最初の「スペース」は、実際に置き換えたい文字であることを確認する必要があり

UPDATE table SET column = REPLACE(column, ' ', ' '); 

注意。

+0

MySQLでフィールドを更新する簡単な方法を知っていますか? – johnnycakes

+0

@ johnnycakes、私の更新答えを見てください。 – Arjan

+0

問題は動作しません。1は0に置き換えられますが、スペースはスペースで区切られません –

関連する問題