MySQL赢得';t存储非英语字符

MySQL赢得';t存储非英语字符,mysql,character-encoding,Mysql,Character Encoding,好的,我问了这个问题,但是解决方案没有解决这个问题 基本上,我的数据库只存储英文字符,即使其字段设置为UTF-8 unicode ci模式 我试着储存俄文字母,它打印出奇怪的字母�и Ñ� 人物 然后我看了看PhpMyAdmin,那些奇怪的角色看起来像这样: гк 然而,当我存储PhpMyAdmin的东西时,俄文字母看起来很好。然而,我的页面打印出来了?????-问号 发生了什么事???如何存储和显示不同的语言?首先,确

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

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

我试着储存俄文字母,它打印出奇怪的字母�и Ñ� 人物

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

гк
然而,当我存储PhpMyAdmin的东西时,俄文字母看起来很好。然而,我的页面打印出来了?????-问号


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

首先,确保在所有进程中使用相同的字符集,我指的是表单、进程和数据库

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

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

我希望这对你有用。如果您需要更多信息,请告诉我。

这也是我的问题,我终于找到了解决方法。我不是一个熟练的程序员,但我在这里写下了答案,以便对那些和我一样,没有用其他方法解决问题的人有所帮助

在我看来,总的来说,你必须确保你首先做了以下三件事:

1-将此标记添加到使用非英语文本的每个HTML源中(将其添加到开头和结尾头标记之间):

(至少这对我自己的语言波斯语有用)

3-从头开始将表格的排序规则设置为“utf8通用ci”(…我强调的是“从头开始”。如果您想知道原因,请阅读下面我的其余答案!):

当然,我上面说的这三件事都很重要,但在我与这场尴尬的灾难搏斗时,没有一件对我有帮助(所以我很失望,但像往常一样,这个页面出现了!) 我阅读了@deceze在帖子下方评论中建议的精彩文章,并在其中看到了以下几行:

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

事实上,我愚蠢的问题是,我之前制作了表(使用的是unicode而不是utf8),然后在尝试将其unicode更改为utf8时,似乎不起作用,因为正如文章所说,即使是表的排序规则也与它的每个字段的排序规则是分开的,所以当您更改一个字段时,其他人倾向于保留他们的默认排序规则(您在从头开始创建表时选择的排序规则!)最后,我转到phpmyadmin中的structure选项卡,并将仍然使用拉丁文1的字段的排序规则更改为utf8 general ci。(此处ci代表不区分大小写)


我希望这会有帮助。

已经有人接了电话。

您需要将排序规则更改为“utf8mb4\u unicode\u ci”

示例数据库查询

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

这个问题已经被反复问过了。我的标准猜测是:您没有设置连接编码。没有更多细节,很难提出其他建议。请参阅以获取完整的检查表。这只是确保将正确的字符和正确的字符集发送到db的一种方法。这就是全部。顺便说一句,这对我来说很有效,我不是突然带着这个代码来的。我使用西班牙语字符,我知道使用特殊字符会让人感到非常痛苦。此外,当你显示文本时,如果仍然显示不正确,请尝试使用htmlentities。这种“巧妙的技巧”非常可怕!在较早的PHP版本(<5.4)中,这将UTF-8编码的文本编码为HTML实体,然后将这些实体解码为拉丁语1。这意味着可以用拉丁语1表示的字符将被解码为拉丁语1,不能用拉丁语表示的字符将保留为HTML实体。然后,您可能会在不知不觉中使用
latin1
连接编码将该数据插入到数据库中,因此它正好起作用。这将在PHP5.4中中断,因为默认的目标字符集在那里更改为UTF-8。阅读我对OP问题的评论。对于如此糟糕的建议,-1。仔细看看这一行,解码时使用UTF-8,所以没有问题。从PHP4.3到最新的PHP5.4,我一直在使用它,没有任何问题。最后,谁让你成为真理的保持者,记住,在编程中总是有多个好的最佳解决方案,而不仅仅是一个。你告诉
htmlentities
输入是UTF-8。您没有告诉
html\u entity\u decode
解码到什么,因此它分别默认为ISO-8859-1(PHP<5.4)或UTF-8(5.4)。
<meta charset="utf8"/>
$conn->query("SET NAMES 'utf8'");
ALTER TABLE `table_name` CHANGE `column_name` `column_name` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;