У меня есть значение в MySQL, который содержит апостроф (’
) и многоточие (...
):Почему Perl DBI избегает значений, полученных из MySQL?
$ /bin/echo "select alias from url_alias where source = 'node/12024'" | \
mysql --skip-column-names -D cat36ia_d7prod
Выход:
forum/technical-discussion/nagging-questions-i’ve-been-too-embarrassed-ask…
Когда я получить значение с Perl DBI
и DBD::mysql
, значение было изменено:
$ perl -MDBI -MDBD::mysql -e
'$dbh=DBI->connect("DBI:mysql:database=my_db",nick);
$v=$dbh->selectrow_array(qq|select alias from url_alias where source = "'node/12024'"|);
print "$v\n";'
Выход:
forum/technical-discussion/nagging-questions-i?ve-been-too-embarrassed-ask?
Почему Perl это делает? Могу ли я переопределить его?
Это не "бежать" вопрос; это проблема с переводом символов. По умолчанию Perl использует ASCII для STDIN, STDOUT и STDERR; и да, вы можете переопределить это поведение. Кроме того, соединение с базой данных может указывать набор символов, который не поддерживает кодовые точки. И да, это тоже можно переопределить. Несколько статей, которые вы должны иметь под своим поясом: [** Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без отговорок!) **] (http://www.joelonsoftware.com/articles /Unicode.html) – spencer7593
И другая статья: [** Что каждый программист абсолютно, положительно должен знать о кодировках и наборах символов для работы с текстом **) (http://kunststube.net/encoding/) – spencer7593