0

所以,我有一个数据库,我使用 Navicat。我们有一个几年前的简单 PHP 网站,我们已将该网站升级为 UTF8。

我们在网站上有完美处理 UTF8 特殊字符的“活动”,但我们在网站上也有“评论”,单引号和其他特殊字符向我显示�。

数据库通过以下方式转换为 UTF:

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

当我在 Navicat 中查看这两个数据库时,我可以看到两者都是UTF8utf8_general_ci.

当我设计表格时,我可以看到“活动”表格,我可以看到单元格是 mediumText 并使用 UTF8 设置。当我设计“评论”部分时,不工作的单元格是一个 Blob,它没有任何字符编码信息。

我们正在做一个非常基本的 SELECT,然后通过 $vairable[column] 显示。

有谁知道为什么“活动”会与 UTF8 完美配合,而“评论”会出现问题?我们对他们中的任何一个都没有做任何超级花哨的事情。

我曾尝试将 Blob 转换为文本字段,但是当我这样做时,数据库在输出到页面时会自行转义,因此一旦文本中有单引号,它就会切断。

我尝试过诸如 utf8_encode、stripslashes、mysql_real_escape_string、htmlentities、htmlspecialchars 之类的东西,但我不确定它们中的任何一个是否会有所帮助。

谢谢!

4

1 回答 1

0

blob 表示二进制大对象。二进制数据在 raw 中没有任何编码。

所以你有 latin1 或 blob 中的任何数据,你显示它并将它视为 utf-8 数据。

您需要使用 PHP 或其他方式手动转换数据。

这是 performanceblog 中的一篇好文章,描述了您可以做什么:

http://www.mysqlperformanceblog.com/2013/10/16/utf8-data-on-latin1-tables-converting-to-utf8-without-downtime-or-double-encoding/

如果您在触发查询时遇到问题,请使用控制台而不是 phpMyAdmin,并且不要忘记连接编码SET NAMES

master> ALTER TABLE t CONVERT TO CHARACTER SET utf8, CHANGE comment comment TEXT;
master> SET NAMES utf8;
于 2013-12-04T15:08:14.710 回答