从mysql数据库中提取数据时,符号 显示而不是£
有问题的字段整理为utf8_general_ci
我在页面的head标签上也有<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
有什么想法吗?
答案 0 :(得分:30)
在对数据库执行任何查询之前使用mysql_query("SET NAMES 'UTF8'");
。
答案 1 :(得分:6)
正如其他人所说,你应SET NAMES 'UTF8'
识别它不是默认的字符集。也可能是错误的字符被插入到数据库中。
检查源是否确实是UTF-8格式,并导入为UTF-8。 (您可以在使用上述查询设置NAMES后重新导入数据。)
如果通过HTML表单输入,请检查包含数据输入表单的HTML页面是否也包含正确的meta
元素。
同时检查HTTP服务器发送给您的标头(您可以使用Firebug扩展程序执行此操作)。您可以在包含以下内容的 .htaccess 文件中为服务器设置默认字符集:
AddDefaultCharset UTF-8
答案 2 :(得分:5)
如果您使用的是PHP,设置字符编码的推荐方法是mysql_set_charset()。
我对MySQL的初始设置是:
<?php
$db = mysql_connect( ... );
mysql_set_charset( 'utf8', $db );
header('Content-Type: text/html; charset=UTF-8');
?>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
这样,我从来没有遇到编码问题。
答案 3 :(得分:3)
请阅读http://mysqldump.azundris.com/archives/60-Handling-character-sets.html
简短版本:在MySQL字符串字段中附加了字符集,因此具有连接。连接字符集是客户端字符集的服务器端表示,它是服务器认为客户端正在使用的内容。
设置连接字符集的简短方法是SET NAMES utf8,如上面的评论所述。
如果字段字符集与连接字符集不同,MySQL将尝试将字段转换为连接字符集。如果两者相等,它就不会尝试这样做。
调试的方法是,如本文所示,使用HEX()函数查看字段,检查实际的磁盘数据是什么以及它是否正确。
然后连接到数据库,如果您实际使用的是utf8,则使用SET NAMES utf8设置连接到正确的客户端字符集。然后再次输出字符串的HEX(),它应该是相同的。如果不是,则连接没有正确的字符集,例如,如果您忘记设置名称utf8。
您可以使用手册中的SET NAMES定义http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html
在MySQL中配置默认连接字符集SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
如果你将它放入my.cnf的mysqld部分并重新启动服务器,则不再需要SET NAMES,因为默认情况下连接现在将具有utf8。
答案 4 :(得分:2)
如果你使用jquery和ajax获取文本,也会发生这种情况, 尝试用utf8_encode($ string)
回显字符串