【发布时间】:2011-07-01 15:08:47
【问题描述】:
问题是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 个字符的文本字符串。
语句执行后,没有出现错误,我检查了数据库,显然实际插入的$value_2 在第 第 80 个 字符处被截断,该字符位于常规英文单词的中间(即不是特殊字符)。
我尝试将field_2 的数据类型更改为varchar(150) 和text。我还使用$dbh->quote($value_2) 代替$value_2。但他们没有帮助。
为什么会这样?我该怎么办?谢谢!!
【问题讨论】:
-
你确定你在连接上设置了 RaiseError 吗?这是什么平台?你使用的是什么 DBD 以及使用什么驱动程序?
-
每次都是同一个字符串受到影响还是无论您输入什么字符串都会发生这种情况。
-
你的输入数据是什么字符编码的?您的数据库期望它采用什么字符编码?
-
影响所有字符串。排序规则在平台之间是相同且一致的。原来是freeTDS截断问题……