使用 perl DBI 插入截断文本
问题在于,DBI
的 insert
在插入到 MS SQL Server 时会截断长字符串。这是我的代码:
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 个字符的文本字符串,其中有空格,但没有其他特殊字符。
执行该语句后,没有引发任何错误,我检查了数据库,显然实际插入的 $value_2
在第 80 字符处被截断,该字符位于 a 的中间常规英文单词(即不是特殊字符)。
我尝试将 field_2
的数据类型更改为 varchar(150)
和 text
。我还使用 $dbh->quote($value_2)
代替 $value_2
。但他们没有帮助。
为什么会发生这种情况?我应该怎么办?谢谢!!
The problem is that DBI
's insert
leaves long string truncated when inserting to MS SQL server. Here are my codes:
my $insert = $dbh->prepare("INSERT INTO my_table (field_1, field_2) values (?, ?)");
$insert->execute($value_1, $value_2);
where field_2
has data type of varchar(100)
and $value_2
is a text string of 90 characters with spaces but no other special characters.
After the statement is executed, with no error raised, I checked the database and apparently the actual inserted $value_2
is truncated at the 80th character, which is in the middle of a regular English word (i.e. not a special character).
I've tried to alter the data type of field_2
to varchar(150)
and text
. I've also used $dbh->quote($value_2)
in place of $value_2
. But they didn't help.
Why is this happening? What should I do? Thx!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您使用 freeTDS,这可能是 freeTDS 邮件列表中发现的错误。请参阅 freetds 静默地将 text/varchar/etc 字段截断为 80 个字符 和 < a href="http://lists.ibiblio.org/pipermail/freetds/2011q2/026943.html" rel="nofollow">http://lists.ibiblio.org/pipermail/freetds/2011q2/026943.html 和 http://lists.ibiblio.org/pipermail/freetds/2011q2/026925.html 和 http://lists.ibiblio.org/pipermail/freetds/2011q2/026944.html
If you are using freeTDS it is probably a bug identified in the freeTDS mailing list. See freetds silently truncating text/varchar/etc fields to 80 characters and http://lists.ibiblio.org/pipermail/freetds/2011q2/026943.html and http://lists.ibiblio.org/pipermail/freetds/2011q2/026925.html and http://lists.ibiblio.org/pipermail/freetds/2011q2/026944.html
我会说尝试各种字符串,看看它们的行为方式是否相同。正如达沃格所建议的,这可能是一个编码问题。我记得MySQL 中的默认排序规则是Swedish 或Latin1,因此在MySQL 中您可能需要将排序规则更改为utf8_general_ci。
I'd say try various strings to see if they all behave the same way. It's probably an encoding issue as davorg suggests. The default collation in MySQL is Swedish or Latin1 as I recall, so in MySQL you'll probably want to change your collation to utf8_general_ci.