可怕的 字符和UTF8中的数据库显示信息

时间:2013-12-04 15:04:57

标签: mysql database utf-8 navicat

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

我们在网站上有'活动',可以完美地处理UTF8特殊字符,但我们在网站上也有“评论”,单引号和其他特殊字符给我看了 。

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

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

当我查看Navicat中的两个数据库时,我发现它们都是UTF8utf8_general_ci

当我设计表格时,我可以看到'活动'表,我可以看到单元格是一个中文文本,并使用UTF8进行设置。当我设计'comments'部分时,不工作的单元格是Blob,它没有任何字符编码信息。

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

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

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

我尝试过像utf8_encode,stripslashes,mysql_real_escape_string,htmlentities,htmlspecialchars这样的东西,但我不确定它们中的任何一个都会有所帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

所以你在一个blob中有latin1或者任何数据,你可以显示它并将其视为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;