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
我尝试使用以下解决方案
答案 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'
但这也没有触发正确的字符集转换。