UTF-8给了我问号

时间:2013-04-22 15:37:16

标签: php mysql utf-8 character-encoding iso-8859-1

我有这个简单的PHP脚本,它搜索mySQL数据库并将结果输出给用户。我曾经使用ISO-8859-1作为我的字符集,但建议使用UTF-8。但是我很难从我以前的charset转到新的charset。

为澄清一些事情,我有:

  • 使用排序UTF-8创建了一个以utf8_unicode_ci编码的数据库和表格。
  • 将我的PHP文件编码为UTF-8
  • 将元字符集设置为UTF-8
  • 在Lighty(Lighttpd)中将所有文字mime-types设置为UTF-8create-mime.assign.pl

现在,当我使用öü等字符从数据库中检索数据时出现问题。如果我只是在没有从数据库中检索它的情况下执行echo "ö";,它就可以正常工作。我猜数据库肯定有问题吗?

我尝试了以下内容,他们已经解决了我的问题:

  • 将元字符集设置为ISO-8859-1(由于某些奇怪的原因,它会起作用,但会打破回声“ö”)。
  • 在输出周围设置utf8_decode()函数。
  • mysql_select_db()宣布以下mysql_set_charset('utf8');
  • 之后

我知道我找到了多种解决方案,但我不知道为什么没有它们就无法工作?在输出或utf8_decode()函数上使用mysql_set_charset()是不好的做法吗?

1 个答案:

答案 0 :(得分:1)

MySQL对UTF8很有趣。您需要确保服务器以UTF运行并且连接也是如此

如果您可以修改服务器上的my.cnf文件,可以将它们添加到[mysqld]部分并重新启动它

character-set-server = utf8
skip-character-set-client-handshake

您也可以(或者也可以)使用

query("SET NAMES utf8");   

在发送/检索数据之前确保数据库需要传递UTF8数据