0

问题是DBI'insert在插入 MS SQL 服务器时会截断长字符串。这是我的代码:

my $insert = $dbh->prepare("INSERT INTO my_table (field_1, field_2) values (?, ?)");
$insert->execute($value_1, $value_2);

其中field_2的数据类型为varchar(100)并且$value_2是一个包含空格但没有其他特殊字符的 90 个字符的文本字符串。

语句执行后,没有出现错误,我检查了数据库,显然实际插入的字符在第80 个$value_2字符处被截断,该字符位于常规英文单词的中间(即不是特殊字符)。

我试图改变field_2tovarchar(150)和的数据类型text。我也用过$dbh->quote($value_2). $value_2但他们没有帮助。

为什么会这样?我该怎么办?谢谢!!

4

2 回答 2

1

如果您使用的是 freeTDS,则可能是 freeTDS 邮件列表中发现的一个错误。请参阅freetds 将 text/varchar/etc 字段静默截断为 80 个字符http://lists.ibiblio.org/pipermail/freetds/2011q2/026943.htmlhttp://lists.ibiblio.org/pipermail/freetds/2011q2/ 026925.htmlhttp://lists.ibiblio.org/pipermail/freetds/2011q2/026944.html

于 2011-07-01T16:40:49.307 回答
0

我会说尝试各种字符串,看看它们是否都表现相同。正如 davorg 所暗示的,这可能是一个编码问题。我记得 MySQL 中的默认排序规则是瑞典语或 Latin1,所以在 MySQL 中,您可能希望将排序规则更改为 utf8_general_ci。

于 2011-07-01T15:33:30.353 回答