10

我使用 MySQL 5.1 并从 UTF-8 解码的 txt 文件中加载大约 270 万行到一个表中,该表本身被声明为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 或两者之间)?

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

4

2 回答 2

11

注意:MySQL 的utf8字符集是有限的,它只支持 BMP 中不超过三个字节的 Unicode 字符。你应该utf8mb4改用。

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

于 2012-05-15T15:32:34.623 回答
8

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

$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');
于 2012-05-02T23:02:22.863 回答