UTF-8 对 mySQL/PHP 的访问令人头疼

Posted

技术标签:

【中文标题】UTF-8 对 mySQL/PHP 的访问令人头疼【英文标题】:UTF-8 Headaches Access to mySQL/PHP 【发布时间】:2011-12-05 18:29:14 【问题描述】:

mysql数据库创建展示

CREATE DATABASE `foo` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ 

mySQL 字段排序规则显示utf8_unicode_ci

Access 导出指定代码页 Unicode (UTF-8)

导入查询是

LOAD DATA LOCAL INFILE '/home/foo/Snapshot/tblImages.txt' INTO TABLE `tblImages` CHARACTER SET utf8 FIELDS OPTIONALLY ENCLOSED BY '|' TERMINATED BY ';' LINES TERMINATED BY '\n';

绘制页面前的php问题

header('Content-Type: text/html; charset=utf-8');

<head>我有

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

如果我在 Windows 7 下的 UltraEdit 中打开 Access 导出的 txt 文件,我会看到正确的重音符号:

Plan d'une propriété située dans la première Municipalité(1000 Dauphine corner St. Philip)

如果我在 Linux 下查询 mySQL 监视器中的数据,我会看到:

Plan dâune propriéété située dans la première Municipalité(1000 Dauphine corner St. Philip)

当我将查询输出回显到浏览器时,我看到:

计划好了吗? situ?e dans la premi?re Municipalit? (1000 Dauphine 角 St. Philip)

如果我在其他查询前加上:

SET NAMES utf8;

然后在 Webkit 浏览器中我看到了:

我在这里错过了什么?

【问题讨论】:

确保数据库连接也使用 utf-8 发出这些查询:mysql_query("SET collat​​ion_connection = utf8_unicode_ci"); mysql_query("设置名称 utf8;");当连接确实确保这是肯定的? 你确定导出的txt文件是UTF8编码的吗?如果未将其编码为 UTF8 并尝试再次导入。您还可以在“导入”文件之前执行SET NAMES 'utf8';(这将设置 3 个会话变量以使用适当的编码) 感谢您的评论 - 我确信 Access 已设置为使用 UTF-8,并且在已确认的 Ultra-Edit 中打开导出的文本文件时。 如果您使用编辑器编辑文件,您确定文件也正确保存为 utf-8 吗? 【参考方案1】:

通过将这些查询添加到连接中解决了该问题:

mysql_query("SET collation_connection = utf8_unicode_ci");
mysql_query("SET NAMES utf8;");

然后调用 utf8_encode() 包装输出。

考虑到所有的标头和 Content-Type 设置,应该不需要函数调用...?

【讨论】:

以上是关于UTF-8 对 mySQL/PHP 的访问令人头疼的主要内容,如果未能解决你的问题,请参考以下文章

令人头疼的冒泡排序

Maven、Webstart 和 Java 8 令人头疼的问题

Oracle Bind 变量、过程和一个令人头疼的问题

软件测试——令人头疼的errors

令人头疼的“时间复杂度”

接近大小限制 - 手表应用程序的大小(50MB 限制令人头疼。)