2012-03-19 112 views
1

好吧,我问了这个问题,但解决方案没有解决这个问题。MySQL不会存储非英文字符

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

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

然后我看着phpMyAdmin的,那些奇怪的字符是这样的:

гк 

然而,当我直接存储从phpMyAdmin的东西,俄罗斯字母看起来很好。然而,我的网页打印出来????? - 问号。

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

+1

这一直被问及一遍又一遍。我的标准猜测:你没有设置*连接编码*。如果没有更多的细节,很难提出其他建议请参阅[如何在Web应用程序中处理Unicode](http://kunststube.net/frontback)以获取完整的清单。 – deceze 2012-03-19 05:19:12

回答

1

首先,确保你在所有的过程中使用相同的字符集,我的意思是,形式,过程和数据库。

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

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

最后,不要忘了你的文本字段设置为:

utf8_unicode_ci 

我希望这对你的作品。让我知道你是否需要更多信息。

+0

这个“巧妙的技巧”应该做什么? – deceze 2012-03-19 06:02:06

+0

这只是一种确保你将正确的charset发送给db的方式。就这样。顺便说一句,这对我来说很有用,我不是只是用这个代码来突出显示。我与西班牙人的字符工作,我知道屁股疼痛可以与特殊字符工作。 – Overkillica 2012-03-19 06:14:14

+0

另外,当你显示你的文本时,如果它仍然没有出来,只是尝试使用htmlentities。 – Overkillica 2012-03-19 06:16:16

0

这也是我的问题,我终于找到了解决问题的方法。我不是一个熟练的编码员,但我在这里写下答案,以便对像我一样的人可能会有所帮助,但他没有设法通过他们尝试过的其他方式解决他们的问题。

在我看来,在一般情况下,你总是要确保你已经先进行这三样东西:

将此标签添加到您的每一个HTML源使用一些文本用语言除英语(添加它的开闭头之间标签):

<meta charset="utf8"/> 

(正如你看到它的没有关闭对标签)

2-只有你(使用名为$康恩一个mysqli的对象为例)连接到数据库,在那里后,做到这一点也查询:

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

(至少这工作了我自己的语言是波斯语)

3-设置你做表的排序规则为“UTF8 - 通用词”从头开始(......我强调这个“从头”。如果你想知道原因,请阅读下面我的答案!):

当然,我上面说过的所有这三件事都很重要,但是当我摔跤这个尴尬的灾难时,他们都没有帮助自己! :(所以我感到失望,但一如既往的SO页出现!:) 我读到@deceze建议的辉煌制品,其是在下面的文章的评论,并从中看到了这些行:

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

其实,我的傻问题是,我们之前做的表(具有比其他UTF8一个unicode)和然后试图改变它的Unicode为utf8时,它似乎没有工作,因为正如文章所说,即使表格的排序与每个字段的排序都是分开的,因此当您更改表格时,其他表格会保留其默认排序规则(您在制作表格时选择的排序规则scratch!)最后,我去了phpmyadmin中的结构选项卡,并将那些仍在使用latin1的字段的排序规则更改为utf8-general-ci。 (这里代表不区分大小写)

我希望它有帮助。