MySQL不会存储非英文字符

问题描述 投票:1回答:2

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

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

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

然后我看了PhpMyAdmin,那些怪异的人物看起来像这样:

гк

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

怎么了???如何存储和显示不同的语言?

mysql character-encoding
2个回答
1
投票

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

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

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

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

utf8_unicode_ci

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


1
投票

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

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

1-将此标记添加到每个HTML源中,这些源使用一些非英语的文本(在开头标记和结束标记之间添加):

<meta charset="utf8"/>

(如你所见,这是一个没有关闭对的标签)

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

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

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

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

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

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

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

我希望它有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.