【问题标题】:text truncated using perl DBI insert使用 perl DBI 插入截断的文本
【发布时间】:2011-07-01 15:08:47
【问题描述】:

问题是DBIinsert 在插入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截断问题……

标签: sql perl dbi truncated


【解决方案1】:
【解决方案2】:

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

【讨论】:

  • 所有字符串的行为方式相同。这确实是@bohica 确定的静默截断问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多