我使用“Like”的非常简单的查询来查找名称为
的产品SELECT p_pid, p_name, p_cat
FROM products
WHERE p_sid=346 AND p_name LIKE 'product name here in utf-8 encoding, can be various languages'
LIMIT 1
当我从具有有效产品名称的代码运行此查询时,我得不到任何结果。如果我复制查询(由php回显到浏览器)并在mysql查询浏览器中手动运行,我会得到一个结果。知道我哪里错了吗?
注意:
1.查询中没有错误。没有结果。 我正在使用ezsql库 3.代码运行良好,并在代码的相同范围内成功地与数据库执行其他SELECT。
答案 0 :(得分:3)
似乎是编码的问题。
尝试运行此查询:
SELECT HEX(CAST('product name here in utf-8 encoding, can be various languages' AS BINARY))
在ezSQL
和查询浏览器中,并比较结果。
这将为您提供MySQL
真正从您的客户端获取并用于比较的二进制流。
如果在ezSQL
属性中设置了错误的连接编码,则字符串可能会被破坏(例如,问号而不是UTF
符号)。
在这种情况下,比较当然会失败。
<强>更新强>
尝试强制不区分大小写的排序规则:
SELECT *
FROM table
WHERE field LIKE 'product name here in utf-8 encoding, can be various languages' COLLATE UTF8_GENERAL_CI
另外,您能否发布二进制转储您的字符串和字段中包含的数据?
SELECT p_pid, p_name, p_cat,
HEX(CAST(p_name AS BINARY)),
HEX(CAST('product name here in utf-8 encoding, can be various languages' AS BINARY))
FROM products
WHERE p_pid = @pid_of_product_that_should_match_but_it_doesnt
答案 1 :(得分:1)
手动和自动运行脚本之间的机器,数据库和用户是否相同?当另一个访问生产服务器时,可以访问测试服务器(例如。)
答案 2 :(得分:0)
这可能是编码错误,而不是通过代码发送正确的信息,因此它正在搜索某些内容,因此缺少错误,但不是它要搜索的内容。手动扫描您的代码,重新执行位,看看您是否发现了可能存在问题的任何内容。
PHP的片段可能会有所帮助,如果它看起来似乎是编码错误。
希望这有助于。