【问题标题】:Foreign characters turn into garbage in mysql外来字符在mysql中变成垃圾
【发布时间】:2011-01-21 01:57:15
【问题描述】:

我在美国。我的网页中有以下行:

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

我的 MYSQL 表是 MyISAM latin1_swedish_ci

但是当有人填写带有外来字符的表单时,它会作为垃圾存储在 MySql 中。一个例子是带有重音的 e 等等 - 通常在美国英语中不使用的东西。即使有人使用了一个奇怪的撇号,它也会变成垃圾:

国家

变成:

国家的

我在那里使用了一个普通的撇号,但你明白了。外来字变成3个乱码。请帮忙! TIA

【问题讨论】:

  • 啊 - 我多么爱’ - 美好的一天即将开始的标志......

标签: php mysql database encoding character-encoding


【解决方案1】:

要么将文档的标题更改为

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

或者 - 更好 - 将表的字符集更改为 UTF-8。要做到这一点并不完全是微不足道的,仅仅改变表格的排序规则并不能解决问题。 This SO question 可能会给出一些指示。

【讨论】:

  • 我怀疑可能是它!我应该将其更改为 utf8_general_ci 还是 utf8_unicode_ci?
  • 如果由我决定,我会选择general。但请参见此处进行比较:forums.mysql.com/read.php?103,187048,188748#msg-188748
  • utf8_general_ci 和 utf8_unicode_ci 是排序规则名称 - 它们决定了字符的排序方式。查看这里以了解这两种排序规则之间的差异:forums.mysql.com/read.php?103,187048,187048
  • @Roland heh,我们今天有同样的想法,不是吗? :)
【解决方案2】:

在我看来,输入数据库的数据是 utf8。要将其放入表中,必须将其转换为 latin1(因为这是列的字符集),这可以产生一个最多三个 latin1 字符。

Pekka 打败了我——他的解决方案应该可以解决这个问题。

【讨论】:

    【解决方案3】:

    我还记得 SQlServer 中的相同案例,希望对这个问题有所帮助。

    它有两种数据类型 varchar [8 bit] 和 NVarChar [16 bit]。

    现在使用 varchar,您不能存储 16 位脚本字符,如中文、印度语等,您必须使用 NVarchar,即可以存储 16 位字符的数据类型。

    【讨论】:

      【解决方案4】:
      • :转换为UTF8
      • :转换为utf8mb4
      • :包括排序规则 utf8mb4_unicode_ci(不区分大小写)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-07
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多