我已加密存储为文本字段的 mysql 表中的数据。一切最初都是用 Windows perl 编写的,并且仍然可以正常工作。我的问题是我在 Linux 上运行相同的代码,当我查询表时,perl 中的文本结果告诉我它更长(这导致我的解密因为太长而爆炸)。
这发生在运行相同的脚本,所以我知道没有代码差异。
Mysql 服务器是 5.1.63,在 OpenSuSE Linux 11.4 x64 上运行。Linux perl 是 v5.12.3 Windows perl 是 5.10.1 有问题的字段定义为文本,utf8_general_ci,当我通过 JDBC 访问它时,数据报告 128 字节,有问题的 SQL 很简单(精简到这里重要的部分)
my $gatherSQL = "select
table.encryptedText from action.theTable table
where table.custno=" . $dbHandle->quote($custno)
my $getHandle = $dbHandle->prepare($gatherSQL);
$getHandle->execute();
my $arrayRef = $getHandle->fetchall_arrayref();
foreach my $myrow (@$arrayRef)
{
$type = $$myrow[0];
}
$getHandle->finish();
#DB Handle is opened with a simple
my $workSQLhandle = DBI->connect("dbi:mysql:$dataDB:$dataServer:$dataPort", $userToUse, $pwToUse);
return($workSQLhandle);
当我在 Windows 中运行代码(通过 samba 共享)时,我得到的字段长度为 128(解密)从命令提示符运行的同一台机器上的相同代码告诉我相同的返回字符串是 193 个字符长(并且赢了'不解密)我对返回的结果进行了比较,它们是相同的,但 perl 告诉我一个比另一个长。
关于如何解决这个问题以及根本原因是什么的任何想法?