从mysql 5.5降级到5.1,utf-8 general_ci

时间:2013-01-30 09:44:29

标签: php mysql utf-8

我正在使用wamp for localhost,它的mysql版本是5.5。在我完成我的网站后,我想将其上传到我的网站(共享主机)。运行(5.1),但我不能再插入阿拉伯字母。

当我在阿拉伯语中插入任何字段时,它会被存储为奇怪的字符“ضÙÙع”。

它在我的电脑上做得很好,但不在线。

默认情况下数据库是myisam,但是所有表都是带有utf8_general_ci的innodb。 这也就是我在我的机器上使用的数据库(默认情况下是innodb)(我已将它导入我在共享主机上的新数据库中)。

到目前为止,我在连接后尝试了这些东西

mysql_set_charset('utf8');

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'");

我还能做些什么?

2 个答案:

答案 0 :(得分:2)

如果您使用mysql_set_charset('utf8');并且在插入数据时没有收到任何错误,则表示您正确地为数据库提供了utf-8。另一方面,您可以在其他charset中定义表,例如Windows-1256(由MySQL标记为'cp1256'),但从您看到的输出看起来似乎不可能,这是UTF-8解码为窗口1252。

所以我看到的可能性是你正在回显数据库中的数据,并看到这个字符串。在发送任何输出之前,您需要告诉浏览器数据是UTF-8:

<?php
header("Content-Type: text/html; charset=utf-8"); 

如果您已经这样做或者这没有用,那么您的数据可能在导入过程中被错误地转换。

如果是这种情况,并且您可以重新导入,请确保在导出数据时输出为utf-8,并在导入导出的数据时,将其视为utf-8。

答案 1 :(得分:0)

这件事发生在我身上,我正在使用htmlentities(),但当我使用htmlspecialchars($string, ENT_QUOTES, 'UTF-8');时,问题就解决了。

希望你有同样的问题。