2013-02-16 56 views
1

假设Adams’ InnAmerica’s Best Inn存储在数据库表establishmentmysqli的预处理语句不能读取的unicode

我要检查Adams’ InnAmerica’s Best Inn在一个变量$EstablishmentName

$stmt = $sql->prepare("SELECT ID FROM `establishment` WHERE Name=? LIMIT 1"); 
$stmt->bind_param("s",$EstablishmentName); 
$stmt->execute(); 
$stmt->store_result(); 
print $stmt->num_rows; 

问题是我无法找到他们。

输出0

注意封闭$EstablishmentNamemb_convert_string($EstablishmentName,'HTML-ENTITIES')否则你会用错误最终Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

更新:我用set_charset('utf8')为客户端;表字符集是utf8,排序规则是utf8_general_ci。文本被编码为原始文本。我正在使用以下数据库管理器:SQLyog和PHPMyAdmin。

UPDATE#2:我附上了截图给你看,我说的是正确的字符集。

screenshot_1

我用$sql->set_charset('utf-8');

 
Array 
(
    [BrandName] => America's Best Value Inn 
    [try1] => 1 
) 

Array 
(
    [BrandName] => Adams' Inn 
    [try1] => 0 
) 

Array 
(
    [BrandName] => Ambassador Inn and Suites 
    [try1] => 1 
) 

Array 
(
    [BrandName] => Amberley Suite Hotel 
    [try1] => 1 
) 

Array 
(
    [BrandName] => America's Best Value Inn 
    [try1] => 0 
) 

更新#3好了,对不起。 Name列是latin1_swedish_ci
我已经更新了列Name

ALTER TABLE establishment MODIFY NAME VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_general_ci; 

这应该没有mb_convert_string()现在的工作。

+0

所以你的数据库连接的字符集是什么?你餐桌上的字符集?你提到htmlentities ...那么'''存储为编码实体?原始文本?没有更多细节,你的问题就无法得到解答。 – 2013-02-16 08:30:19

+0

这两个文本都被编码为原始文本。我为客户端提供了set_charset('utf8'),表字符集是utf8,排序规则是utf8_general_ci。 – 2013-02-16 08:31:48

+0

@MarcB你对此有何想法? – 2013-02-16 09:02:10

回答

-2

这解决了这个问题:

iconv('windows-1250', 'utf-8', $EstablishmentName); 
-1

我唯一可以告诉大家,我看到很多混乱这里

  • 准备语句是这里无关紧要,因为它们只实现了数据的替代方法,但不改变数据本身。您将有相同的结果直接将值添加到数据库中。
  • mb_convert_string不会导致归类错误的非法混合,因为此错误是由内部内部编码冲突而不是数据格式触发的。
  • 没有代码,以证明储值等于一个用来检查

假设你可以根据ID获取Adams’ Inn America’s Best Inn价值,让我建议你去找回它,然后手动比较。 var_dump()他们。如果仍然无法看到差别 - urlencode()来他们第一次

+0

我已经更新了这个问题。列名被设置为'latin1_swedish_ci',我解决了它,但仍然存在问题。 – 2013-02-16 09:28:25

0

只要把

mysqli_set_charset($db_connection, 'utf8'); 

数据库连接后。

$con=mysqli_connect("localhost", "root", "xxxxx","database"); 
mysqli_set_charset($con, 'utf8'); 
相关问题