PostgreSQL数据库将我的字符从perl转换为奇怪的格式

时间:2012-06-13 12:37:47

标签: perl postgresql encoding

我在更新postgresql数据库中的条目时遇到问题,它将我的字符转换为错误的格式。我更新的方式是:

use Encode;
...
$user_name = escapeSql($user_name); # a statement that to doese this: line 1: $s =~ s/\?/_/g; and line 2: $s =~ s/\*/%/g;
$user_name = decode("utf-8", $user_name);
...
$statement = "UPDATE person SET name='".$user_name."', email='".$user_email."' WHERE id='".$user_id."'"; # The real statement have some more attributes, buts its the name that errors.
print STDERR "Statement: ". $statement;
$sth = $dbh->prepare($statement);
$result = $sth->execute();

如您所见,我打印出语句以检查user_name看起来应该是什么,这是它的样子: enter image description here

你可以看到它的名字是“ThørÅstrüpPédersen”,这是我的名字,我用特殊的字符替换了一些字符我试图插入/更新我的条目。现在我已经调试了几天的大问题是,当我在数据库上创建一个select语句并获取我的user_name以查看新名称(使用dojo在web-GUI中输入)是否已更改并正确更新。但看起来像是:

enter image description here

我根本无法弄清楚为什么我的数据库剂量或者我如何以任何方式检查数据库的charcter编码设置并进行正确的转换。但是再一次,它在PERL中看起来很好,因为错误日志正确地输出它(如上面第一个img中所示),但是PostgreSQL数据库讨厌它并且由于某种原因将它转换为糟糕的字符。

我真的希望有人可以提供帮助,即使它不是我第一次遇到编码问题..但是第一次我无法弄清楚,因为它看起来像是PostgreSQL的东西而不是Perl或PHP问题。 / p>

1 个答案:

答案 0 :(得分:2)

您可以通过在psql提示符下发出\ l来检查数据库编码。您还可以使用“show client_encoding;”

检查客户端编码

在UTF8中重建数据库可能更好。关于PostgreSQL中编码的所有内容都解释为in the manual