Php MySql utf8_encode / decode返回不同​​的字符串

时间:2011-10-10 09:07:09

标签: php

我的母语使用重音,我通常在php中使用utf8_encode来utf8_decode函数以避免出现问题。

现在我有一个类型为varchar(utf8_bin)的MySql字段和另一个类型为longtext(utf8_bin)的字段。 Varchar返回奇数字符,而longtext工作正常。

他们用php管理的方式有区别吗?

$a = "Início";
echo utf8_encode($a)."<br>";
echo utf8_decode($a);

Using MySql field of type varchar I get

Início
In�cio

Using MySql field of type text or longtext I get

Início

witch is the correct output I need.

2 个答案:

答案 0 :(得分:3)

  

他们用php管理的方式有区别吗?

没有

答案 1 :(得分:2)

在运行SQL以获取文本之前,您是setting the mySQL charset吗?关于字符编码问题,请参阅here,当字段中已有内容时,您是否转换了字段编码?

  

不幸的是,像这样的直接转换会破坏文本   数据库并使其无法读取,特别是如果有实际的话   国际字符(即非拉丁语言)。原因   这种扭曲是复杂的,难以理解,但结果却是如此   是每列必须转换两次

[...]

  

如您所见,我们首先将LONGTEXT列转换为其blob类型   对应:LONGBLOB。完成后,我们将其转换回   LONGTEXT,但是我们想要的字符集utf8;

听起来你对常见的编码问题非常不满意,但如果不是check here