2012-03-15 136 views
0

我在MySQL表中的字段中有一个字符串。MySQL:字段中的空白字符实际上不是空白。它是什么?

它是VARCHAR,表编码是utf8。

领域的内容是one two three

如果我运行select * from table where content like '%one two%';返回的行。
但是,如果我运行update table set content = REPLACE(content, " ", "+;;");那么结果是one two+;;three

那么,这是什么第一个“空白”字符?

我在Ruby on Rails应用程序中使用此表。 Ruby不会将它识别为空白字符。 (例如,如果我将字符串拆分为“”,则不会拆分到第一个空格上)

任何想法发生了什么?

谢谢。

+0

在Rails控制台中将该字符串拉出数据库,并查看'your_string.bytes'。 – 2012-03-15 17:47:32

+0

将“坏”空间转换为bytes.to_a为[194,160]。 “好”的空间是[32] – johnnycakes 2012-03-15 18:03:24

+0

这就是Arjan正在讨论的0xC2 0xA0。 – 2012-03-15 18:23:52

回答

2

它可能是一个不间断的空格字符(UTF8中的2个字节:0xC2 0xA0)。这不是一个空间,将它与空间进行比较将会产生错误。

您可以更新您的表像这样:

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

请注意,您应该确保第一个“空间”实际上是要替换的字符。

+0

你知道一个快速/简单的方法来更新我在MySQL中的字段来替换一个固定空间的非破坏空间吗? – johnnycakes 2012-03-15 18:03:57

+0

@johnnycakes,看到我更新的答案。 – Arjan 2012-03-15 18:15:39

+0

唯一的问题是它不工作..它将取代1与0但没有空间破碎的空间 – 2014-07-24 15:44:17