2011-10-10 58 views
0

我的母语使用重音符号,我通常在php中使用utf8_encode来utf8_decode函数来避免问题。Php MySql utf8_encode/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. 
+0

号什么是PHP文件和输出的字符编码? – Arda

+0

Pluda

+0

嗯,由于PHP文件的字符编码不仅仅与输出有关,所以我遇到了土耳其字符的问题。你也应该检查一下。 Notepad ++或任何IDE都允许改变它。 – Arda

回答

2

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

不幸的是,直接转换一样,可以裂伤文中 数据库,并使其不可读,尤其是如果有实际 国际字符(即非拉丁语言)。对于 这种失真的原因是复杂的,很难理解,但结果 是,每一列必须转换两次

[...]

正如你可以看到,我们首先转换LONGTEXT列为其blob型 对应部分:LONGBLOB。一旦完成,我们将它转​​换回 LONGTEXT,但是使用我们期望的字符集utf8 ;.

这听起来像你很常见的编码问题,尽管check here如果不是。

+0

你好,不,我以前用utf_8编码创建了数据库。之后插入记录。我检查了你的链接,最后一个解决了这个问题,使用mysql_set_charset('utf8',$ link);在查询数据库似乎工作之前。谢谢 – Pluda

+0

太棒了,它通常会修复问题 – SW4

3

他们被php管理的方式有什么区别吗?

+0

+1以回答问题;) – Phil