一尘不染

UTF-8:在数据库中正确显示,但是尽管使用utf-8字符集,但在HTML中却无法正确显示

mysql

我使用MySQL
5.1,并从一个270万行的UTF-8解码txt文件加载到一个表中,该表本身声明为utf8_unicode_ci,并且所有char字段都声明为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再次输入字符时,它们还可以吗?还是问题出在哪里(将文件加载到db,HTML或两者之间的某个位置时)?

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


阅读 233

收藏
2020-05-17

共1个答案

一尘不染

注意:MySQL的utf8字符集是有限的,它仅支持BMP中的Unicode字符,最多占用三个字节。您应该utf8mb4改为使用。

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

2020-05-17