2016-05-29 20 views
0

SELECT * FROM mytablename WHERE sku = 'AZ-EFCQ-5' LIMIT 0,30选择查询在MySQL删除这些字符

在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任何奇怪的字符,请查看下 enter image description here

+0

请问您可以从mytablename中选择ascii(substring(description,36,1)),length(描述),其中sku ='az123''并发布结果? – EagleRainbow

+0

@EagleRainbow显示行0 - 0(总计1次,查询花费0.0005秒),不返回任何内容 – user580950

+0

这很奇怪,你认为在聊天室中讨论这个问题在https://chat.stackoverflow.com/房间/ 113259 /选择查询-地移除这些字符,在MySQL的? – EagleRainbow

回答

1

在聊天中进一步分析MySQL的截图表明,真的有东西坏了关于MySQL数据库之间的连接处理的字符集和PHP程序的运行,我们想出了下面的“解决方案”:

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

隐藏字符实际上这在某种程度上得到了由导入过程中引入 秒。由于它们没有任何信息,但只是令人不安,可以在读取列时将它们替换掉(参见上面的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' 

但也没有触发适当的字符集转换。