我有一个名为Traduction的表,其中包含以下两行:
francais |espagnol |allemand |anglais
-------------+-----------------+---------------+----------------
ORANGE litée |NARANJA ENCAJADA |ORANGEN GELEGT |ORANGE 1 LAYER
ORANGE LITEE |NARANJA ENCAJADA |ORANGEN GELEGT |ORANGE 1 LAYER我的问题是:
SELECT * FROM T_TRADUCTION where francais= 'ORANGE LITEE';该查询返回表中的两行,而它应该只返回具有ORANGE LITEE值(而不是ORANGE litée)的记录。
我不明白为什么。
发布于 2015-05-05 15:51:47
将数据库排序规则更改为latin1_general_cs
将数据库DEFAULT CHARACTER设置为latin1
现在执行您的查询。
SELECT * FROM T_TRADUCTION where francais= 'ORANGE LITEE';发布于 2015-05-05 15:33:34
试着像这样纠正它:
SELECT * FROM T_TRADUCTION where francais='ORANGE litée';诚挚的问候。
发布于 2015-05-05 16:02:29
正确的编码是棘手的,有太多的层:浏览器,页面,PHP,MySQL。
你需要对每一层的数据流进行检查。
检查HTTP标头,标头。检查请求正文中真正发送的内容。不要忘记,MySQL几乎到处都有编码:数据库、表、列、服务器,作为一个整体,客户端要确保到处都有正确的编码。
来自manual>
SQL指示客户端将使用什么字符集将
语句发送到服务器。因此,集合名称'cp1251‘告诉服务器,“将来从这个客户端传入的消息都是字符集的cp1251。”它还指定服务器将结果发送回客户端时应使用的字符集。(例如,如果您使用SELECT语句,则它指示用于列值的字符集。)
https://stackoverflow.com/questions/30046605
复制相似问题