将REPLACE与CHAR(160)一起使用将返回十六进制值

我试图摆脱MYSQL中的&nbsp个字符,但是在使用REPLACE返回十六进制字符串的过程中出现了奇怪的行为。

原始值是一些存储在BLOB类型的字段中的HTML:

<h3>This was just an appetizer. Are you ready for the full course?</h3><p>Dive into more business news,check out the latest tech trends,and get a couple quick tips from our health section.  </p></div>

我正在使用的SQL是这样的:

UPDATE tbl
SET field = REPLACE(field,CHAR(160),'');

执行后,这就是数据库中剩下的内容:

3C68333E5468697320776173206A75737420616E206170706574697A65722E2041726520796F7520726561647920666F72207468652066756C6C20636F757273653F3C2F68333E3C703E4469766520696E746F206D6F726520627573696E657373206E6577732C20636865636B206F757420746865206C61746573742074656368207472656E64732C20616E6420676574206120636F75706C6520717569636B20746970732066726F6D206F7572206865616C74682073656374696F6E2E20C23C2F703E3C2F6469763E

这是怎么回事,我该如何避免呢?我是否需要使用VARCHAR作为字段类型?

bishileiaaaa 回答:将REPLACE与CHAR(160)一起使用将返回十六进制值

替换后,您将获得(二进制)BLOB。

所以您必须将其转换回文本

UPDATE tbl
SET field = CAST(REPLACE(field,CHAR(160),'')AS CHAR(10000) CHARACTER SET utf8);

当然,您必须检查字符集和大小。

,

我发现CHAR代码无效,但是复制粘贴空白有效。这看起来像一个正常的空间,但实际上是CHAR(160),并且我没有任何错误。 ' '

本文链接:https://www.f2er.com/3162787.html

大家都在问