0

当我更新我的 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 看起来应该是这样的,下面是它的样子: 在此处输入图像描述

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

在此处输入图像描述

我根本无法弄清楚为什么我的数据库会这样做,或者我如何以任何方式检查数据库设置的字符编码并进行正确的转换。但话又说回来,它在 PERL 中看起来不错,因为错误日志正确输出它(如上面第一个 img 所示),但 PostgreSQL 数据库讨厌它并出于某种原因将其转换为蹩脚的字符。

我真的希望有人能提供帮助,即使这不是我第一次遇到编码问题.. 但我第一次想不通,因为它看起来像是 PostgreSQL 的东西,而不是 Perl 或 PHP 的问题。

4

1 回答 1

2

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

用 UTF8 重新创建数据库可能会更好。手册中解释了有关 PostgreSQL 中编码的所有内容。

于 2012-06-13T12:44:14.657 回答