我有一个MySQL表,我设置为使用的编码utf8_swedish_ci
。两个示例值是2 Kung
和1 Krön
- 注意瑞典字符。我需要从PHP脚本中搜索这些国际化的字符串。我的PHP文件编码在UTF-8
。我的代码,错误处理剥离的清晰,看起来是这样的:编码问题与库MySQLi
$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'.";
现在,如果我$值设置为第一个例子中的值,我得到了一个匹配的行。使用另一个示例值,我不会获得行。我已经测试了查询在PHPMyAdmin中的工作。我认为错误在于国际角色,因此我在某个地方搞乱了编码。那么我做错了什么,我该如何解决这个问题?
编辑:行$db->set_charset('UTF-8');
失败,因为我使用了不正确的字符集。它应该是utf8
。原来我的错误处理太少了,我应该在set_charset
之后检查$db->error
。
你在哪里错了:在创建表的时候没有指定编码,因此它使用的默认。如何解决它:[将编码更改为一致。](http://stackoverflow.com/questions/6115612/how-to-convert-an-entire-mysql-database-characterset-and-collation-to-utf -8) – Sammitch 2014-10-10 19:25:53
@Sammitch你为什么认为他没有指定编码? @David尝试设置名称并在列名和表名中使用反引号,因为如果您在某些情况下不会导致问题。你还检查'$价值'是否正确? – 2014-10-10 19:32:23
@Sammitch我确实指定了表格的编码。 @LaciK我实际上使用反引号,当我将这个示例拉到一起时,将它们移除。我使用了'echo $ value',所以我相信它具有正确的价值。 – David 2014-10-10 20:03:18