1

假设 Adams’ Inn America’s Best Inn存储在db表中establishment

我必须检查 Adams’ Inn America’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

附注else你最终会$EstablishmentName出错mb_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。

更新#2:我附上了屏幕截图,让您看看我正在告诉正确的字符集。

截图_1

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

大批
(
    [品牌名称] => 美国最佳价值旅馆
    [尝试1] => 1
)

大批
(
    [品牌名称] => 亚当斯旅馆
    [尝试1] => 0
)

大批
(
    [品牌名称] => 大使套房酒店
    [尝试1] => 1
)

大批
(
    [品牌名称] => 安伯利套房酒店
    [尝试1] => 1
)

大批
(
    [品牌名称] => 美国最佳价值旅馆
    [尝试1] => 0
)

更新#3好的,对不起。该列Namelatin1_swedish_ci
我已经更新了专栏Name

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

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

4

3 回答 3

0

就放

mysqli_set_charset($db_connection, 'utf8');

在你的数据库连接之后。

例子

$con=mysqli_connect("localhost", "root", "xxxxx","database");
mysqli_set_charset($con, 'utf8');
于 2013-08-04T07:31:10.773 回答
-1

我唯一能说的是我在这里看到了很多困惑

  • 准备好的语句在这里无关紧要,因为它们只实现数据替换的方法,但不会改变数据本身。您将获得相同的结果,直接将值添加到数据库中。
  • mb_convert_string 不会导致 Illegal mix of collat​​ions 错误,因为此错误是由内部内部编码冲突触发的,而不是由数据格式触发的。
  • 没有代码可以证明存储的值等于用于检查的值

假设您可以Adams’ Inn America’s Best Inn根据 id 获取值,我建议您检索它,然后手动比较。var_dump() 他们。如果您仍然看不到差异 - 首先使用 urlencode()

于 2013-02-16T09:11:47.383 回答
-2

这解决了问题:

iconv('windows-1250', 'utf-8', $EstablishmentName);
于 2013-02-22T08:56:28.507 回答