选择Query以在Mysql中删除这些字符

时间:2016-05-29 13:52:34

标签: mysql

SELECT * 来自mytablename 在哪里sku ='AZ-EFCQ-5' 限制0,30

在MySQL表格(描述字段)中,数据库中有一些奇怪的字符。看起来有200,000条记录中包含所有这些字符的近400条记录。

示例:当我运行查询时,其中一个字段的数据库记录显示以下内容

Select * from mytablename where sku='az123'

Replacement for TOY TRAIN 746 N&W J   Replacement Light Bulb

但是当我在PHP中运行相同的查询并打印它时,它会显示

Replacement For TOY TRAIN 746 N&W JÂ Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â  Replacement Light Bulb

我尝试使用以下解决方案

How can I find non-ASCII characters in MySQL?

这不起作用,在Mysql中没有显示任何奇怪的字符,请查看下面的MySQL截图 enter image description here

1 个答案:

答案 0 :(得分:1)

由于聊天中的进一步分析表明MySQL DB连接和运行的PHP进程之间的字符集处理确实存在问题,我们提出了以下"解决方案":

SELECT replace(description, char(160), ' ') as description 
FROM dumpdata WHERE AZ_Code = 'AZ-EFK9-6' 

隐藏的字符实际上是  s,它以某种方式由导入过程引入。因为它们不携带任何信息,但只是令人不安,所以只需在读取列时替换它们就可以删除它们(参见上面的SQL语句)。对于根本原因,这不是真正正确的解决方案 - 感觉更像是一种解决方法。但是,出于特定目的,它被认为是足够的。

对于可能存在类似问题的其他读者,请注意:数据库连接由面向对象样式的mysqli驱动。我们试图

$conn->set_charset('utf8')

并通过conn->get_charset()确认这也是成功的。但是,仍然出现了有线字符的问题。此外,我们还尝试使用

进行显式转换
SELECT cast(description as char character set utf8) 
FROM dumpdata WHERE `AZ_Code` = 'AZ-EFK9-6'

但这也没有触发正确的字符集转换。