有很多线程专门讨论这个话题,我觉得很难问这个。
但是,我完全不知道问题是什么。
我试图通过PHP(html)表单将特殊字符(西里尔文,斯堪的纳维亚语等)插入MySQL数据库。
字符如:Ä,Ö,Å,以及俄语字母等。
根据此论坛中的先前主题,我尝试了以下所有内容(在MySQL数据库连接字符串之后插入):
mysqli->set_charset("utf8");
这不起作用,所以我尝试了以下内容:
mysqli_query("set names 'utf8'");
mysqli_query("set charset 'utf8'");
PHP不推荐这些。但是,无论如何我试过了,但仍然没有运气。
(我的所有数据库,表格和列都整理为: UTF8_general_ci )
此外,我的所有html表单都有以下内容:
<meta charset="utf-8">
所以,我完全不知道自己做错了什么。一旦数据被发送到数据库,它就会显示(在数据库本身中)为垃圾字符(问号和其他象形文字)。
然而,有趣的是:
(a)当我在我的网站上查看数据时,它显示正确;
(b)当数据在电子邮件正文中发送时,它也会正确显示
所以..........为什么它在数据库本身内没有正确显示?
答案 0 :(得分:4)
在处理特定字符集(如UTF-8)时,将整行代码设置为相同的字符集非常重要。以下是如何遵循这一点的几点建议。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header('Content-Type: text/html; charset=utf-8');
$connection->set_charset("utf8");
(直接连接后)还要确保您的数据库和表格设置为UTF-8,您可以通过此查询执行此操作(在数据库中,只需执行一次):
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
请记住,一切都需要设置为UFT-8 charcode。如果可以将某些内容设置为UFT-8(或其他字符集,请检查PHP-docs(php.net)),则应将其设置为与其他所有内容相同的字符集。
答案 1 :(得分:0)
(a)当我在我的网站上查看数据时,它显示正确;
(b)当数据在电子邮件正文中发送时,它也会正确显示
这意味着数据正确存储在db中,当你得到的输出与输入相同时,逻辑正确吗?
另一个问题是:您如何查看数据库,您使用的是哪种客户端?
PHPMyAdmin,SomeDesktop Client ..问题就在那里..因为数据存储正确..似乎是这样;)