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 collation_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 的访问令人头疼的主要内容,如果未能解决你的问题,请参考以下文章