mySQL TEXT数据类型的奇怪显示问题

时间:2011-11-09 23:28:13

标签: php mysql utf-8

我正在开发一个项目,其中mySQL表有一个数据类型为TEXT的字段,而collat​​ion是utf8_general_ci,表格排序(出于某种未知原因)设置为utf8_unicode_ci。

mysql -V输出为“mysql Ver 14.12 Distrib 5.0.51a,debian-linux-gnu(x86_64)使用readline 5.2”

PHP版本为5.2。

此字段中某些行的数据是“[Dan S. Leyrer?]”。如果从命令行查询记录,它看起来很好。如果你在phpMyAdmin中查看或编辑记录,它在Chrome和IE9中看起来很好。但是当字段显示在IE9,Chrome,FF等中作为PHP脚本输出的一部分时,问号显示为撇号“[Dan S. Leyrer']”。尝试在IE9和Chrome中的phpMyAdmin和通过命令行从mySQL监视器编辑,并且没有看到显示的变化。

不可否认,我试图添加对utf8_encode(),utf8_decode(),htmlentities()的调用。没效果。

我尝试编辑其他字段,最后我发现添加了一个“?”使用数据类型TEXT的任何字段在PHP输出中显示此问题,但具有相同utf8_general_ci排序规则的VARCHAR字段没有问题。

那里发生了什么?


我向所有努力帮助我的人致歉。

我的前任在他的意大利面条代码中对此字符串应用了一些处理。我没有意识到这一点。我认为这是解决UTF8问题的努力:

function scrub_string($input_string) {
    $replace_array = array( "?","\x92","?","\x91" );
    $input_string = str_replace($replace_array,"'",$input_string);  
    $output_string = utf8_encode($input_string);
    return $output_string;
}

我非常抱歉浪费时间......来到新奥尔良,我正在买啤酒。

2 个答案:

答案 0 :(得分:2)

显然,您的数据库连接字符集(使用SET NAMES设置)与您的浏览器所期望的字符集不同(Firefox页面信息 - >编码)。

尝试将两者都设置为UTF-8:

mysql_set_charset('utf8'); // SET NAMES utf8
header('Content-Type: text/html; charset=utf-8');

答案 1 :(得分:1)

使用的排序规则仅确定数据在数据库中的存储和处理方式,它不会影响用于将数据传输到客户端的字符集。后者可以用mysql_set_charset下注。尝试将连接设置为用于生成的输出文档的相同字符集,这可能会有所帮助。