2012-08-08 37 views
2
SELECT c.ci_num, 
     CASE 
      WHEN c.ci_homonym=1 
      THEN concat(ci_name,', ',name_fr) 
      ELSE ci_name 
     END as ci_name 
FROM city as c join fr_department as fr on c.ci_sr=fr.code 
WHERE ci_name LIKE 'bé%' 
LIMIT 5 

我选择CITY_NAME和city_num的特殊字符,但如果有特殊字符(BE)的字符串时,它不执行查询,但是当我执行此查询到phpMyAdmin此查询显示结果。为什么不能通过mysql_query($ query1)执行,为什么?以及如何执行此操作, 谢谢。的mysql无法执行在WHERE子句

+1

你能分享错误代码吗? mysql_error()返回什么? – 2012-08-08 11:11:36

+0

使用'执行查询 – 2012-08-08 11:11:48

回答

3

这是怎么é字符编码? (例如UTF-8)
设置通过经由mysql_set_charset()相应的MySQL连接使用的字符集。这也会影响用于比较字符的排序规则。每个字符集都有默认的排序规则,即比较/排序字符的默认方式。对于大多数字符集,可以使用多种排序规则,例如,忽略大写/小写。

要获得与MySQL相关的字符集(和归类)的把握,我建议在这种情况下阅读

---编辑:例如---

让我们就拿这个脚本(文件)

<?php 
$startsWith = 'bé'; 

$mysql = mysql_connect('localhost', 'localonly', 'localonly') or die(mysql_error()); 
mysql_select_db('test', $mysql) or die(mysql_error()); 

echo 'version: ', PHP_VERSION, "\n"; 
echo 'os: ', PHP_OS, "\n"; 
echo 'mysql_client_encoding: ', mysql_client_encoding($mysql), "\n"; 
for($i=0; $i<strlen($startsWith); $i++) { 
    printf('%02X ', ord($startsWith[$i])); 
} 

我的编辑保存默认文件UTF-8编码显然(之前不知道)我的PHP版本带有一个使用utf-8作为默认连接字符集的mysql连接器。
因此输出是

version: 5.4.1 
os: WINNT 
mysql_client_encoding: utf8 
62 C3 A9 

你看如何到字符被编码为三个字节0X62 0xC3 0xA9;最后的字节是é的utf-8表示。因此,我们有客户编码= UTF-8和输入字符串为UTF-8,以及 - > OK
现在,如果我从UTF-8更改为ISO-8859-1的脚本文件的编码结果是

version: 5.4.1 
os: WINNT 
mysql_client_encoding: utf8 
62 E9 

现在é仅由一个字节编码;这是该角色的ISO-8859-1表示。如果这个字节序列被发送到mysql服务器(它希望从客户端获得一个utf-8序列),服务器就不知道该怎么做 - 因为它是一个无效的utf-8序列。更糟糕的是,偶然的情况下,iso-8859序列形成一个同样有效的utf-8序列,服务器会做一些完全错误的事情,因为它会将序列解释为与假设不同的东西。

+2

而且之前html_entity_decode',应检查*归类*数据库,并连接上... – poncha 2012-08-08 11:12:17

+0

的确,更新的答案... – VolkerK 2012-08-08 11:14:22

+0

actully我打印查询,但我的查询$ QUERY1 =“选择C。 ci_num,CASE WHEN c.ci_homonym = 1名THEN的concat(ci_name, '',name_fr)ELSE ci_name END作为ci_name FROM城市为C加入fr_department作为c.ci_sr = FR FR。代码WHERE ci_name LIKE'$ queryString%'LIMIT 5“;而queryString包含bé – 2012-08-08 11:14:50

0

如果“是”是硬编码,它可能有一些做的文件编码。特别是对于特殊字符,数据库的文件编码应该始终与您的PHP脚本相同。