0

問題は、DBIMSSQLinsertサーバーに挿入するときに長い文字列が切り捨てられたままになることです。これが私のコードです:

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 メーリング リストで特定されたバグです。text/varchar/etc フィールドをサイレントに 80 文字に切り捨てる freetdshttp://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

于 2011-07-01T16:40:49.307 に答える
0

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.

于 2011-07-01T15:33:30.353 に答える