текст усечен с помощью вставки Perl DBI

Проблема в том, что 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. Но они не помогли.

Почему это происходит? Что я должен делать? Спасибо!!


person Zhang18    schedule 01.07.2011    source источник
comment
Вы абсолютно уверены, что у вас установлен RaiseError для соединения? Что это за платформа? Какой DBD вы используете и какой драйвер под него?   -  person bohica    schedule 01.07.2011
comment
Каждый раз затрагивается одна и та же строка или это происходит независимо от того, какую строку вы вводите.   -  person shaneburgess    schedule 01.07.2011
comment
В какой кодировке символов находятся ваши входные данные? В какой кодировке символов ожидает ваша база данных?   -  person Dave Cross    schedule 01.07.2011
comment
Влияет на все струны. Сопоставления одинаковы и одинаковы на разных платформах. Оказывается, это была проблема усечения freeTDS...   -  person Zhang18    schedule 06.07.2011


Ответы (2)


Если вы используете freeTDS, возможно, это ошибка, обнаруженная в списке рассылки freeTDS. См. freetds автоматически обрезает поля text/varchar/etc до 80 символов и 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

person bohica    schedule 01.07.2011

Я бы сказал, попробуйте разные строки, чтобы увидеть, все ли они ведут себя одинаково. Вероятно, это проблема с кодировкой, как предполагает Даворг. Насколько я помню, сопоставление по умолчанию в MySQL — шведский или Latin1, поэтому в MySQL вы, вероятно, захотите изменить сопоставление на utf8_general_ci.

person Wedge Martin    schedule 01.07.2011
comment
Все строки ведут себя одинаково. Это действительно была проблема молчаливого усечения, идентифицированная @bohica. - person Zhang18; 06.07.2011