UTF-8:在数据库中正确显示,但不是在HTML中,尽管utf-8字符集

时间:2012-04-28 20:10:48

标签: mysql html utf-8 character-encoding

我使用MySQL 5.1并将一个大约2.7密耳行的UTF-8解码的txt文件加载到一个表中,该表本身被声明为utf8_unicode_ci,并且所有字段都被声明为utf8_unicode_ci ,使用LOAD DATA INFILE ...

在数据库本身,字符似乎都是正确的,一切看起来都不错。但是,当我使用php打印它们时,字符显示为???,尽管我在HTML头中使用了utf-8声明:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
...

在另一个表格(使用utf-8)中,我从提交的表单中插入文本,这些字符在数据库中显得异常,但是当我使用SELECT...打印时,这些字符再次正确显示。

所以,我想知道:出了什么问题? UTF-8字符在数据库中是否正确显示或奇怪地显示,但当您再次SELECT时它们可以正常显示?或者问题在哪里(将文件加载到数据库中,在HTML中或在其间的某个地方)??

非常感谢您的任何提示或建议! :)

2 个答案:

答案 0 :(得分:12)

注意:MySQL's utf8 charset is limited, it only supports Unicode characters in the BMP that take up no more than three bytes. You should be using utf8mb4 instead.

如果phpMyAdmin将您输入的数据显示为正确的Unicode文本,那么我的打赌是您在连接后没有SET NAMES utf8

答案 1 :(得分:8)

尝试在连接到DataBase之后但在接收数据之前使用此类代码

$db->query('set character_set_client=utf8');
$db->query('set character_set_connection=utf8');
$db->query('set character_set_results=utf8');
$db->query('set character_set_server=utf8');