MySQL查询返回非UTF8字符

时间:2013-05-24 11:35:18

标签: php mysql utf-8

我有一个登录界面,可以检查MySQL数据库输入的用户名和密码。 我的问题是它不承认像“ÅÄÖ”这样的瑞典字符。

例如,密码“lösenord”在数据库中,但不接受,但“losenord”是。

数据库有“utf8_general_ci”连接排序规则,我在我的index.html中将charset设置为UTF-8,但在我的php脚本中没有。 我已经阅读了解决这样的UTF 8问题的百万种不同方法,但我无法让它发挥作用。

如果有人能够指出我正确的方向,我会非常感激。 我是否需要对每个mysql查询进行编码,设置一些META标记?

干杯

1 个答案:

答案 0 :(得分:1)

连接到MySQL后尝试使用SET NAMES 'UTF8'

$con=mysqli_connect("host", "user", "pw", "db");   
if (!$con)
{
    die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}

/* change character set to utf8 */
if (!$con->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $con->error);
}

正如manual所说:

  

SET NAMES表示客户端将用于发送SQL的字符集   语句到服务器...它还指定服务器应该的字符集   用于将结果发送回客户端。

在你的表中也使用utf8_swedish_ci,否则字符串比较会出错,MySQL会将'ö'和'o'视为相同的字符。