我有一个 MySQL 表,我将其设置为使用编码 utf8_swedish_ci
。两个示例值是 2 Kung
和 1 Krön
- 请注意瑞典字符。我需要从 PHP 脚本中搜索这些国际化字符串。我的 PHP 文件采用 UTF-8
编码。为了清晰起见,我的代码删除了错误处理,如下所示:
$db = new mysqli($host, $user, $password, $user);
$db->set_charset('UTF-8');
$stm = $db->prepare('SELECT `id` FROM `myTable` WHERE `bok` LIKE ?');
echo "Searching on $value'...";
$stm->bind_param('s', $value);
$stm->execute();
$stm->bind_result($result);
$stm->close();
echo "Fetched '$result'.";
现在,如果我将 $value 设置为第一个示例值,我会得到单个匹配行。对于其他示例值,我没有得到任何行。我已经测试了这些查询在 PHPMyAdmin 中的工作情况。我认为错误在于国际字符,因此我在某处搞乱了编码。那么我做错了什么以及如何解决这个问题?
编辑:$db->set_charset('UTF-8');
行失败,因为我使用了不正确的字符集。它应该是utf8
。事实证明我的错误处理太少了,我应该在 set_charset
之后检查 $db->error
。
最佳答案
$db->set_charset('UTF-8');
请注意,MySQL 很特殊,它内部使用的 UTF-8 字符集名称是 utf8
(不带破折号),而不是常规的 UTF-8
。
如有疑问,请参阅显示字符集;
;)
关于php - MySQLi 的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305878/