PHP 5.4.9 MySQL 5.5.28.3 -选择带有UniCode字符的字段返回空结果


PHP 5.4.9 MySQL 5.5.28.3 - Selecting fields with UniCode characters returns blank results

我已经在网上搜索了几个小时了,似乎没有找到任何帮助。当我在PHP 5.3和MySQL 5.1上工作时,这是很好的。当我升级这两个时,我意识到对包含UniCode字符的字段进行的选择会给出空白结果。

表被设置为UTF8,特别是字段也被设置为UTF8以防万一。我有一个charset=utf-8在我的文档的标题区域。

我在我的论坛上做了两个测试帖子,一个是直文本,一个是花引号。然后,我创建了一个简单的PHP查询来获取这两行。代码的要点如下:

<?php
$con = mysql_connect("XXXXX","XXXXX","XXXXX");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("XXXXX", $con);

echo "<br />";
echo "<br />";
echo "PHP 5.4.9 having issues displaying UniCode characters. MySQL 5.5.28.3. FastCGI has been removed. IIS.";
echo "<br />";
echo "<br />";

$result1 = mysql_query("SET NAMES 'utf8'");

$result = mysql_query("SELECT post_body from ubbt_posts where post_id = 358826");
while($row = mysql_fetch_array($result))
  {
  echo "Post Body without unicode: " . $row['post_body'];
  echo "<br />";
  echo "<br />";
  }

$result = mysql_query("SELECT post_body from ubbt_posts where post_id = 358825");
while($row = mysql_fetch_array($result))
  {
  echo "Post Body with unicode: " . $row['post_body'];
  echo "<br />";
  echo "<br />";
  }
mysql_close($con);
?>

行为是正确显示非unicode post。另一个根本不显示。这并不是说它显示了一个方框或块来代替引号——它不显示任何

我试过改变mysql_fetch_array到mysql_fetch_assoc。但这无济于事。出于无奈,我尝试了utf8_encode,但也无济于事。

我读到有些人对IIS/PHP 5.4.9/FastCGI组合有问题,所以我卸载了FastCGI。至少我尽了最大的努力-文件都消失了,IIS再次指向php-cgi.exe文件。但是PHP仍然报告它正在使用FastCGI。我想它一定是在注册表上看到了什么?但无论如何,文件都不见了,所以真的不可能。但这并没有帮助。

在这一点上,我甚至会尝试一些疯狂的想法来让它工作。任何想法吗?更新:

我现在已经用PHP和ASP进行了测试。两种语言给出相同的行为。我的结果集与更新后的代码给出了这些结果:

Post Subject without unicode: test Post without unicode

Post Body没有unicode: test Post,只有普通字符,以及xyzzy用于测试。

正文长度:74

Post Subject with unicode: test Post with unicode

Post Body with unicode:

正文字段长度:0

因此在检查长度时,ASP和PHP都报告该字段的长度为零。

可能是ODBC有问题吗?它可能是FastCGI仍然干扰,即使我试图删除它?

UPDATE 2 -

为了解决这个问题,我必须做的是将数据从备份中重新加载到已经设置为UTF8和字段设置为UTF8的表中。然后,我必须在连接之后的代码中执行set names utf8命令。我不认为FastCGI在这里涉及-当我重新安装FastCGI的东西仍然是好的。我仍然有一些琐碎的问题,但我认为表设置和重新加载处理了我的大部分问题。

丽莎

尝试用另一种方式设置utf8 -

mysql_set_charset('utf8', $con);

——

mysql_query("SET NAMES 'utf8'");

其中$con是使用mysql_connect()方法创建的连接

—请尽量使用PDOmysqli