外来字符在mysql中变成垃圾

时间:2010-02-25 16:00:56

标签: php mysql database encoding character-encoding

我在美国我的网页上有以下内容:

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

我的MYSQL表是MyISAM latin1_swedish_ci

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

国家

变成了:

nation’的

我在那里使用常规撇号,但你明白了。外来字符变成3个垃圾字符。请帮忙! TIA

4 个答案:

答案 0 :(得分:6)

将文档标题更改为

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

或 - 更好 - 将表格的字符集更改为UTF-8。要做到这一点并非完全无足轻重,只需更改表的排序规则就行不通。 This SO question可能会给出一些指示。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

现在使用varchar你不能存储16位脚本字符,如Chines,Indic等,你必须使用NVarchar,即可以存储16位字符的数据类型。

答案 3 :(得分:0)

  • 不要不要:转换为UTF8
  • 要做:转换为utf8mb4
  • DO :包括排序规则utf8mb4_unicode_ci(不区分大小写)