我使用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中或在其间的某个地方)??
非常感谢您的任何提示或建议! :)
答案 0 :(得分:12)
SET NAMES utf8
SET NAMES utf8mb4
命令发送到MySQL,然后再运行任何MySQL查询。 Content-Type: text/html;charset=iso-8859-1
,浏览器不同意哪些应该获胜)。utf8
替换为涉及MySQL的utf8mb4
。如果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');