?

Log in

Catalyst::Model::DBI с поддержкой UTF-8 - Catalyst Web Framework
The elegant MVC framework

Shoorick posting in  The elegant MVC framework
User: ru_catalyst (posted by shoorick)
Date: 2010-12-23 18:57
Subject: Catalyst::Model::DBI с поддержкой UTF-8
Security: Public
Mood:пора домой!пора домой!
Tags:perl
Практика показала, что использование DBIx::Class не всегда оправдано — трудно писать сложные запросы, да и количество выполняемых им лишних телодвижений удручает.

Среди альтернативных вариантов — использование DBI. Для него, естественно, на CPAN уже есть модель Catalyst::Model::DBI, однако её хелпер создаёт модуль, который (при работе с MySQL) не дружит с UTF-8. Что вполне поправимо: достаточно добавить в настройки подключения атрибут mysql_enable_utf8 и переопределить метод connect, добавив туда выполнение запроса SET NAMES utf8

Готовый вариант модели — https://gist.github.com/752990
Post A Comment | 9 Comments | Share | Link






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



Shoorick
User: shoorick
Date: 2010-12-23 17:22 (UTC)
Subject: О!
Вот про Callbacks я не знал.
Reply | Parent | Thread | Link



Shoorick
User: shoorick
Date: 2010-12-23 17:24 (UTC)
Subject: Re: О!
Мало я читал мануалы, не достиг ещё просветления :-)
http://search.cpan.org/~timb/DBI-1.615/DBI.pm#Callbacks
Reply | Parent | Thread | Link



1blueskydreamer
User: 1blueskydreamer
Date: 2010-12-23 19:44 (UTC)
Subject: (no subject)
А, чем DBI лучше Class:DBIx?
Точнее, чего он не может сделать? Мне казалось, что он позволяет писать запросы любой сложности...
Кстати, "узнаю брата Колю", тоже пишем на Perl с MS SQL. :)
Reply | Thread | Link



Shoorick
User: shoorick
Date: 2010-12-24 06:41 (UTC)
Subject: Чем лучше
DBIx::Class — это ещё более высокая абстракция от базы данных, чем DBI. То есть, ситуация схожа, например, с сравнением языков программирования: у си уровень выше, чем у ассемблера, но ниже, чем у перла. Это не хорошо и не плохо — это просто языки разных уровней.

Простые запросы на DBIx::Class делать проще, чем писать SQL, когда используешь DBI. Но сложные — труднее: надо сильно погружаться в мануал, да и доступных материалов по DBIx::Class на порядки меньше, чем по SQL.
Reply | Parent | Thread | Link



1blueskydreamer
User: 1blueskydreamer
Date: 2010-12-24 17:11 (UTC)
Subject: Re: Чем лучше
Из Calss:DBIx всегда можно вытащить DBI handle и делать все самому ручками. Но мне ни разу не приходилось. Голимый SQL всегда можно воткнуть в DBIx::Class::ResultSource::View. А отказываясь от DBIx, отказываешься от разный вкусностей, типа HTML::FormHandler и inflation.

В чем поинт?
Reply | Parent | Thread | Link



User: dolbanavt
Date: 2010-12-24 18:10 (UTC)
Subject: Re: Чем лучше
Хорошая статья описывающая проблематику (актуальную - еще не все копья сломаны в холиварах) ОР-проекции: http://citforum.ru/database/articles/vietnam/
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.
Reply | Thread | Link



User: dolbanavt
Date: 2010-12-24 19:28 (UTC)
Subject: (no subject)
а как юнит-тестируете?
Reply | Parent | Thread | Link



browse
my journal
links
June 2011