我的mysql中有一个带有“ñ/Ñ”字符的单词。但是当我打印它时,它被一个带问号的菱形取代。这是它到目前为止所做的,但没有奏效。
<meta charset="utf-8">
mysql:host=localhost;dbname=dbnameko;charset=UTF-8
Collation : latin_sedish to utf8_general_ci
我用谷歌搜索并搜索了 stackoverflow 线程,但没有一个答案是正确的。
自 1991 年以来我们就有了 Unicode,因此这些问题仍然使我们无法开展工作,这是相当令人遗憾的。不幸的是,i18n 的默认设置有时都是错误的,所以我们必须自己做......
就 HTTP 而言,您已经做了正确的事情,但是您必须为 MySQL 连接做正确的事情......
尝试这个:
$result = mysql_query("SET NAMES utf8; SET CHARACTER SET utf8;");
$cmd = "select * from yourtable";
$result = mysql_query($cmd); //all should data should arrive correctly encoded
为避免在每个连接中都必须这样做,您可以更改 .cnf 文件。请查看以下 SO 问题的已接受答案:Change MySQL default character set to UTF-8 in my.cnf?
更新:事实证明问题确实出在 SQL 连接字符串上。但是,在 Apache 上 AddDefaultCharset 也会导致问题,所以我留下这部分答案。
如果您不了解它的作用,AddDefaultCharset 会很讨厌!如果已设置,Apache 将为 text/html 和 text/plain 内容类型的响应设置字符集。这实际上意味着您将被忽略。根据 Sacx 的建议将其设置为 utf-8,或者关闭。(顺便说一句,如果它不是设置为特定的字符集而是设置为“on”,这将与设置为“iso-8859-1”相同,这使得调试此类情况变得更加困难!)更多信息: http://httpd.apache.org/docs/2.2/mod/core.html
另请参阅: 如何使 MySQL 正确处理 UTF-8
您的 Web 服务器不知道此字符集。如果您使用 Apache,请在配置文件或 .htaccess 中添加此行
AddDefaultCharset utf-8