允许在MySQL数据库中使用非ASCII字符

4

最近我在MySQL数据库中插入了一条包含俄语字母的记录,但是数据库无法正确显示它们。有什么方法可以让我的网站支持多种语言呢?


该列的数据类型是什么? - Daniel A. White
重新标记,移除加密,更改为字符编码。 - Maarten Bodewes
2个回答

2

您应该查看utf8编码

请问您的数据库和表正在使用哪种编码?(可以发一下您的数据库结构吗?)

编辑:回答您在评论中提出的问题,utf8_general_ci更快,但不关心某些语言特定的比较。您可以在我在帖子中提交的链接中了解更多信息。实际上,它会影响排序和搜索的行为。

它确实很重要,您想让数据库如何运作,所有这些排序规则都在不同的环境中有用。在您的情况下,我不会使用utf8_bin,因为它只使用其二进制值来比较字符串。


我有几个选项可以尝试用于utf8编码。你会建议使用utf8_bin、utf8_general_ci还是utf8_unicode_ci? - Proffesor
我已经编辑了我的帖子以在评论中回答你的问题,但如果你能阅读我在这里发布的文章,我只需重写这篇文章就能完全回答你的问题。 - Jan Vorcak
谢谢你的帮助。不幸的是,现在发生的情况是当我查看实际表格时,它可以正常显示俄语字符,但当它显示在我的网站上时,仍然显示一系列问号。 - Proffesor
通常情况下,当您没有为连接指定编码时,会出现此错误。我不知道您使用的是哪种语言,例如在php中,它是[mysql_set_charset](http://php.net/manual/en/function.mysql-set-charset.php),在其他语言中,您可以找到类似的函数/方法,但我认为这超出了本问题的范围(或者我们可以将其移至聊天室)以避免垃圾邮件。 - Jan Vorcak

0

虽然这是很久以前的事情了,但是帮助我的方法是在执行插入语句时使用utf8_decode($variable)。

例如,如果我echo查询语句,字符显示得很好,但是当查询被执行时,非ASCII字符会出现乱码,这毫无意义。使用utf8_decode($variable)后,问题得到解决。

选择nvarchar作为列类型也可能有所帮助。

示例查询:

$query = 'INSERT INTO table VALUES("'.utf8_decode($variable).'");';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接