Catalyst::Model::DBI с поддержкой UTF-8 (original) (raw)
Практика показала, что использование DBIx::Class не всегда оправдано — трудно писать сложные запросы, да и количество выполняемых им лишних телодвижений удручает.
Среди альтернативных вариантов — использование DBI. Для него, естественно, на CPAN уже есть модель Catalyst::Model::DBI, однако её хелпер создаёт модуль, который (при работе с MySQL) не дружит с UTF-8. Что вполне поправимо: достаточно добавить в настройки подключения атрибут mysql_enable_utf8
и переопределить метод connect
, добавив туда выполнение запроса SET NAMES utf8
.
Готовый вариант модели — https://gist.github.com/752990
User: | dolbanavt |
---|---|
Date: | 2010-12-23 15:21 (UTC) |
Subject: | (no subject) |
Может я что-то важное упустил когда стал пользоваться Catalyst::Model::DBI для полностью юникодных проектов?
Просто в конфиг модели добавил:
options => {
mysql_enable_utf8 => 1,
Callbacks => {
connected => sub { shift->do( q{SET NAMES utf8} ); return; },
},
}
Reply | Thread | Link
| | | | ----------------------------------------------------------------------------------------- | |
А, чем DBI лучше Class:DBIx?
Точнее, чего он не может сделать? Мне казалось, что он позволяет писать запросы любой сложности...
Кстати, "узнаю брата Колю", тоже пишем на Perl с MS SQL. :)
Reply | Thread | Link
DBIx::Class — это ещё более высокая абстракция от базы данных, чем DBI. То есть, ситуация схожа, например, с сравнением языков программирования: у си уровень выше, чем у ассемблера, но ниже, чем у перла. Это не хорошо и не плохо — это просто языки разных уровней.
Простые запросы на DBIx::Class делать проще, чем писать SQL, когда используешь DBI. Но сложные — труднее: надо сильно погружаться в мануал, да и доступных материалов по DBIx::Class на порядки меньше, чем по SQL.
Reply | Parent | Thread | Link
| | | | ----------------------------------------------------------------------------------------- | |
Из Calss:DBIx всегда можно вытащить DBI handle и делать все самому ручками. Но мне ни разу не приходилось. Голимый SQL всегда можно воткнуть в DBIx::Class::ResultSource::View. А отказываясь от DBIx, отказываешься от разный вкусностей, типа HTML::FormHandler и inflation.
В чем поинт?
Reply | Parent | Thread | Link
User: | adtim |
---|---|
Date: | 2010-12-24 17:17 (UTC) |
Subject: | (no subject) |
DBIx:Class делает лишние телодвижения только в случае криво написаного кода.
После написания сложной функции делаю трассировку запросов и довожу до состояния "как сам бы написал на sql".
А для запросов, которые удобнее писать на sql получаю dbh хэндлер вот так или dbh_do.
Для простых задач есть сочни DBIx::Simple.