PHP & lt; = =比;MySQL;在数据库中存储西里尔/斯堪的纳维亚字符


PHP <==> MySQL; storing Cyrillic / Scandinavian characters in the database

关于这个话题的帖子太多了,我觉得问这个问题很傻。

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

我试图插入特殊字符(西里尔字母,斯堪的纳维亚等)到MySQL数据库,通过PHP (html)形式。

字符如:Ä,Ö,Å,以及俄语字母等

根据以前的线程在这个论坛,我已经尝试了所有以下(插入后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)当数据在电子邮件正文中发送时,它也正确显示

..........为什么它不能在数据库本身正确显示??

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

  • 所有属性必须设置为ut8(排序规则为而不是与数据库中的字符集相同)
  • 您应该将文档本身保存为UTF-8(如果您使用notepad++,它是格式 -> 转换为UFT-8(或UTF-8 w/o 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');
  • 连接到数据库时,将字符集设置为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字符码。如果可以将某些内容设置为UFT-8(或其他字符集,请查看PHP-docs (php.net)),则应该将其设置为与其他所有内容相同的字符集。

(a)当我在我的网站上查看数据时,它显示正确;

(b)当数据在电子邮件正文中发送时,它也正确显示

这意味着数据正确地存储在数据库中,当你得到的输出是相同的输入,逻辑正确吗?

另一个问题是:您如何查看数据库,您使用的是哪种客户端?

PHPMyAdmin, SomeDesktop Client..问题就在那里……因为数据存储正确…似乎是这样;)