MySQL不会存储非英文字符

时间:2012-03-19 05:14:51

标签: mysql character-encoding

好的,我问了这个问题,但解决方案并没有解决这个问题。

基本上,我的数据库只存储英文字符,即使其字段设置为UTF-8 unicode ci模式。

我试着存储俄文字母,它打印出奇怪的Ñ Ð¸Ñ 字符。

然后我看了PhpMyAdmin,那些奇怪的角色看起来像这样:

гк

然而,当我从PhpMyAdmin存储一些东西时,俄语字母看起来很好。然而,我的页面打印出????? - 问号。

发生了什么事???如何存储和显示不同的语言?

3 个答案:

答案 0 :(得分:1)

首先,请确保您在所有过程中使用相同的字符集,我的意思是表单,流程和数据库。

我建议在HTML标题的元标记中使用charset = utf-8。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

最后,不要忘记将文本字段设置为:

utf8_unicode_ci

我希望这适合你。如果您需要更多信息,请告诉我。

答案 1 :(得分:1)

这也是我的问题,我终于找到了解决问题的方法。我不是一个熟练的程序员,但我在这里写答案,这对那些喜欢我,没有设法用他们尝试过的其他方法来解决问题的人有帮助。

在我看来,一般来说,你必须首先确保你已经完成了这三件事:

1 - 将此标记添加到使用某些英语以外语言的HTML源中(将其添加到开始和结束 head 标记之间):

<meta charset="utf8"/>

(正如你所看到的那样,没有关闭对的标签)

2 - 在您连接数据库的地方(例如使用名为$ conn的mysqli对象)之后,也执行此查询:

$conn->query("SET NAMES 'utf8'");

(至少这适用于我自己的语言,即波斯语)

3 - 设置您对&#34; utf8-general-ci&#34;的表格的整理。从头开始(......我强调这个&#34; 从头开始&#34;。如果你想知道原因,请阅读下面的其余答案!):

当然,我上面提到的所有这三件事都很重要,但当我在这场尴尬的灾难中挣扎时,他们都没有帮助过我自己! :(所以我很失望,但随后一如既往这个SO页面出现了!:)  我阅读了@deceze建议的精彩文章,该文章位于帖子下方的评论中,并在其中看到了以下几行:

  

数据库服务器具有默认字符集,数据库可以具有默认字符集,数据库表可以具有默认字符集,最后该列具有字符集设置。规则很简单:如果没有为列指定显式字符集,则使用下一个更高的默认值。如果列具有显式字符集,则服务器,数据库和表默认值都不会产生任何影响。

实际上,我的愚蠢问题是我早些时候制作了桌子(用utf8以外的unicode)和然后在尝试将其unicode更改为utf8时,它似乎没有工作,因为正如文章所说,即使表的整理与每个字段的整理是分开的,所以当你更改一个时,其他人倾向于保留他们的默认排序(你在制作时选择的那个)表格从头开始!)最后,我进入了phpmyadmin中的结构选项卡,并将那些仍在使用latin1的字段的排序规则也改为utf8-general-ci。 (ci代表Case Insensitive)

我希望它有所帮助。

答案 2 :(得分:0)

已经有人回答。 Here

您需要将排序规则更改为“ utf8mb4_unicode_ci”。

示例数据库查询

ALTER TABLE `table_name` CHANGE `column_name` `column_name` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;