PHP< ==> MySQL的;在数据库中存储西里尔字母/斯堪的纳维亚字符

时间:2015-09-12 22:36:15

标签: php mysqli utf-8 character-encoding cyrillic

有很多线程专门讨论这个话题,我觉得很难问这个。

但是,我完全不知道问题是什么。

我试图通过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)当数据在电子邮件正文中发送时,它也会正确显示

所以..........为什么它在数据库本身内没有正确显示?

2 个答案:

答案 0 :(得分:4)

在处理特定字符集(如UTF-8)时,将整行代码设置为相同的字符集非常重要。以下是如何遵循这一点的几点建议。

  • 所有属性必须设置为ut8(排序规则 NOT 与数据库中的字符集相同)
  • 您应该将文档本身保存为UTF-8(如果您使用的是Notepad ++,它的格式 - &gt; 转换为UFT-8 (或UTF-8)没有BOM),有区别 - 两者都可能适合你)
  • PHP和HTML中的标题应设置为UTF-8:
    • HTML:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    • PHP:header('Content-Type: text/html; charset=utf-8');
  • 连接到数据库后,设置charset ti 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 ..问题就在那里..因为数据存储正确..似乎是这样;)