我使用MySQL 5.1,并从一个270万行的UTF-8解码txt文件加载到一个表中,该表本身声明为utf8_unicode_ci,并且所有char字段都声明为utf8_unicode_ci,使用LOAD DATA INFILE…
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...。
SELECT...
所以,我想知道:出什么事了?是UTF-8在数据库中正确显示字符还是奇怪,但是当您SELECT再次输入字符时,它们还可以吗?还是问题出在哪里(将文件加载到db,HTML或两者之间的某个位置时)?
UTF-8
SELECT
非常感谢您的任何提示或建议!:)
注意:MySQL的utf8字符集是有限的,它仅支持BMP中的Unicode字符,最多占用三个字节。您应该utf8mb4改为使用。
utf8
utf8mb4
SET NAMES utf8
SET NAMES utf8mb4
Content-Type: text/html;charset=iso-8859-1
如果phpMyAdmin将您输入的数据显示为正确的Unicode文本,那么我敢打赌,SET NAMES utf8连接后您不会这样做。