在MySQL中存储特殊字符(Android,PHP也参与其中)


Storing Special Characters in MySQL (Android, PHP involved too)

好的,我正在尝试从Android应用程序将数据存储在MySQL数据库中。我使用PHP作为中间人。

我提交给数据库的内容如下(例如):Sakè

MySQL中存储的内容是:萨卡

当我在Android中打印回这行时,它知道要转换回:Sakè

问题是,当我做某些select语句时,是的,它基本上没有达到应有的效果。我有什么办法可以保持这种一致性吗?

MySQL中的一个注意事项:我使用utf8_general_ci

您需要为数据库连接为PHP脚本强制执行正确的字符。最简单的方法是执行这个查询:

SET NAMES 'utf8';

只有一次,最好在你connect()之后。如果你使用Zend框架,只需添加以下内容:

resources.db.params.charset  = UTF8

到您的application.ini。有关mysqli,请参阅set_charset()。如果您使用其他内容,请查看文档中的类似内容。如果什么都没有,SET NAMES技巧总是有效的。

但有一个重要的注意事项-根据您将数据放入数据库的方式,您的数据库内容很可能需要修复,因为它在INSERT s期间被损坏的字符集损坏。因此,即使您现在执行SET NAMES,您也很可能仍然会看到数据显示错误。但具有讽刺意味的是,好吧——你现在表现得很好,但数据本身就坏了。您现在只需要修复您的数据(只需重新插入)。