问题是DBI
的{{1}}在插入MS SQL服务器时会留下长字符串。这是我的代码:
insert
其中my $insert = $dbh->prepare("INSERT INTO my_table (field_1, field_2) values (?, ?)");
$insert->execute($value_1, $value_2);
的数据类型为field_2
,而varchar(100)
是一个90个字符的文本字符串,其中包含空格但没有其他特殊字符。
执行语句后,没有引发错误,我检查了数据库,显然实际插入的$value_2
被截断为 80th 字符,这是在常规字符的中间英文单词(即不是特殊字符)。
我尝试将$value_2
的数据类型更改为field_2
和varchar(150)
。我还使用text
代替$dbh->quote($value_2)
。但他们没有帮助。
为什么会这样?我该怎么办? THX !!
答案 0 :(得分:1)
如果您使用的是freeTDS,则可能是freeTDS邮件列表中发现的错误。请参阅freetds silently truncating text/varchar/etc fields to 80 characters和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
答案 1 :(得分:0)
我会说尝试各种字符串,看看它们是否都表现得一样。这可能是davorg建议的编码问题。我记得MySQL中的默认排序规则是瑞典语或Latin1,所以在MySQL中你可能想要将你的排序规则更改为utf8_general_ci。