我有一个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
。事实证明我的错误处理太少,我应该在$db->error
之后检查set_charset
。
答案 0 :(得分:1)
$db->set_charset('UTF-8');
请注意,MySQL是特殊的,它在内部用于UTF-8字符集的名称是utf8
(没有短划线),而不是常规UTF-8
。
如有疑问,请参阅SHOW CHARACTER SET;
;)
答案 1 :(得分:-1)
试试这个,它可能会有所帮助。
$db = new mysqli($host, $user, $password, $user);
$db->set_charset('UTF-8');
$stm = $db->prepare('SELECT `id` FROM `myTable` WHERE `bok` LIKE ?');
$value = '%'.$value.'%'; //added this line
$stm->bind_param('s', $value);
$stm->execute();
$stm->bind_result($result);
$stm->close();
echo "Fetched '$result'.";
我尝试使用带有utf8_general_ci编码的char(180)列上的UTF-8字符LIKE'',它返回0行,所以我尝试使用LIKE%''%并且有效