Запрос базы данных с Perl возвращает целое число, а не строку

#perl

Вопрос:

Рассмотрим следующий код Perl:

 #!/usr/bin/perl
use DBD::mysql;
use Data::Dumper;
$dbh = DBI->connect('DBI:mysql:database', 'user', 'password') or die "Can't connect to MySQL";
$sql = "SELECT OdL_ID FROM OdLs LIMIT 1";
$OdL_ID = $dbh->selectrow_array($sql);
print Data::Dumper->Dump([$OdL_ID]);
 

На моем «старом» SLES 11 SP4 он возвращается:

 $VAR1 = '386379';
 

На моем «новом» openSUSE Leap 15.3 он возвращается:

 $VAR1 = 386379;
 

Как я могу заставить свой «новый» openSUSE Leap 15.3 возвращать строку, а не целое число? (Обратите внимание, что у меня есть много сценариев Perl, у которых есть эта проблема!)

Комментарии:

1. Пожалуйста, прочитайте perlnumber и, в частности, числовые операторы и числовые преобразования . Perl использует такое представление числа, которое наилучшим образом подходит для текущей операции. Примечание: в вашем коде его достаточно использовать print Dumper($OdL_ID); .

2. Тебе действительно нужно Dumper здесь? Может быть, просто попробовать print $OdL_ID ?

3. CAST поле в a VARCHAR или строковое значение возвращаемого значения (например, путем объединения его с пустой строкой)

4. Обратите внимание, что использование кавычек DD не обязательно указывает на строку.

5. Привет, я переношу веб-приложение (perl, mysql, apache, jeasyui) с «SLES 11 SP4» на «openSUSE Leap 15.3». Все в порядке. Единственная проблема-с джесюи. В разных точках моего приложения я получаю следующую ошибку: «Неперехваченная ошибка типа: (промежуточное значение). Прописные буквы-это не функция»

Ответ №1:

Я мигрирую из веб-приложения (perl, mysql, apache, jeasyui) с «SLES 11 SP4» на «openSUSE Leap 15.3». Все в порядке. Единственная проблема-с джесюи.

В разных точках моего приложения я получаю следующую ошибку:

«Ошибка неперехваченного типа: (промежуточное значение).Прописные буквы-это не функция»

Я обнаружил, что проблема связана со строкой json. На моем «старом» сервере строка json: [{"OdL_ID":"386379"}] На моем «новом» сервере строка json: [{"OdL_ID":386379}] .

Причина этой разницы в том, что на моем старом сервере OdL_ID возвращается как строка ( $VAR1 = '386379' ), но на моем новом сервере OdL_ID возвращается как целое число ( $VAR1 = 386379 ).

В базе данных OdL_ID определяется как «int», тогда, вероятно, «новый» сервер вернет правильную строку.

Возможным решением является преобразование всех этих значений из int в string. Но, возможно, есть более быстрое решение.