Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

Про MSSQL (пост умеренной ненависти, сдобренный добрыми советами)

Среди всяких разных баз данных и средств управления ими есть так называемый "MicroSoft SQL". Близкий родственник Sybase, я бы даже сказал, родной брат. Мне пришлось на этой неделе с ним повозиться немного.

Началось всё с того, что, да-да, конечно, маздай не производит бесплатных модулей, которые можно прицепить к пхп, чтоб всё работало. Под виндами рекемендуют какую-то библиотечку куда-то скопировать, и типа будет работать. Но что же делать нам, простым смертным людям, которые живут в чужеродной для маздаевского эскуэля среде, в которой динамически слинкованные библиотеки имеют расширение so, а не dll?
Для начала вам понадобится такая штука: FreeTDS. Она позволяет чему угодно цепляться к сайбейзу, и к мсскуэлю, значит, тоже. Её я вроде бы видел в репозитории Убунты, но скачал исходники и сам их собрал:
cd /usr/local/src/freetds-0.82/
./configure
make
make install
И на выходе получил файлик библиотеки под каким-то неудобочитаемым названием навроде libct.a или чего-то подобного. Расширение "a" означает, что это статически слинкованная библиотека - я не знаю, что это такое, поэтому в терминах могу и ошибиться. Но это пока непригодно для работы.
Пункт 2: скачиваете исходники пхп, архив всего 12 метров. Находите там модуль mssql и вытаскиваете его из архива наружу. Затем:
cd /urs/local/src/php-mssql/
./configure --with-mssql
make
make install
И остается только найти, куда мэйк засунул готовый модуль mssql.so, переложить его в папку с расширениями пхп и добавить его в php.ini. По поводу параметра, который там у configure, я не уверен, возможно, можно обойтись без него, а может, надо указывать --with-mssql= < путь к папке, где валяются собранные библиотеки freetds >.
Это еще не всё. Найдите freetds.conf (предположительно, он может быть в /usr/local/etc/ где-то) и там укажите, за какую версию клиента себя выдавать при подключении к вашему серверу. Ну там всё написано в комментарии и в примерах, разобраться легко.

Когда всё было готово, началась ебля с попытками подключения к серверу mssql. Тут обнаружилась странная вещь: если делать так, как написано в мануале и в примерах и как делают все, то не работает, а если делать не так, то работает:
mssql_connect('server\instance', 'user', 'pass') - не фурычит.
mssql_connect('server,port', 'user', 'pass') - тоже не фурычит.
mssql_connect('server_ip:port', 'user', 'pass') - фурычит.

Ну и затем, значит, потребовалось написать маленький запросец - выбрать записи из таблички, значит. Если выбирать сразу все записи, то пхп выпадает с критической ошибкой - мол, не хватает памяти. Поэтому встал вопрос о том, как ограничить количество выбираемых рядов... есть два способа. Первый способ - это передать это количество в качестве параметра при вызове функции mssql_query(), второй настолько же простой, но найти его было не так-то просто.

Как выбрать первые десять записей в разных СУБД?

MySQL:
select * from table limit 10

Oracle:
select * from table where rownum < 11

MSSQL:
select top 10 * from table


Этот синтаксис я нашел в мануале по сайбезу. С мануалом по мсскуэлю странная история. Попробуйте поискать "mysql manual" в поисковике. Первая ссылка ведет куда-нибудь типа mysql.ru/doc или dev.mysql.com/doc, короче, к официальному мануалу. Если поискать "oracle manual", то первая ссылка будет вести, скорее всего, на www.oracle.com/technology/documentation - тоже к официальному мануалу. Но если поискать "mssql manual", то первая ссылка и еще девяносто девять ссылок следом за ней ведут на какие-то форумы с обсуждениями "а чо у миня никанектицо?", на какие-то списки факов, лажовых тип-энд-триксов, щедро сдобренных дергающимися порнобаннерами - и это даже если искать маздаевским LiveSearch. Такое ощущение, что официального мануала нет вообще. Сука, ненавижу Microsoft и все их долбаные поделки!


Ну и чтоб прочувствовать всю силу и мощь MSSQL: кусочек логов, которые пишет мой скрипт импорта MSSQL->MySQL (в начале стоит set_time_limit(0);):

2009-03-20 11:46:59 Succesfully connected
2009-03-20 11:49:16 Query time: 136.667559 sec
... (тут примерно 75 килобайт текста)
2009-03-20 12:29:08 Query time: 125.119546 sec

UPD 23.03.2009 Я оптимизировал запрос, разбив его на три и убрав самые тяжелые джойны, тем самым ускорив его на два порядка.
Tags: web, работа
Subscribe

  • Первый заметный результат диеты

    Ну, конечно, на самом деле не первый. Я же каждое утро взвешиваюсь, скрупулёзно записываю результаты, а потом ещё и строю графики. И ещё чаще…

  • Плёнка №185

    Тематика снимков обычная: городское фото. Время съёмок: март 2021. Плёнка: Fomapan profi line action 400 Фотоаппарат и объектив: Zenit-E + Helios…

  • Фотографии с двух прогулок

    Четвёртого апреля было, хотя и ветрено, но солнечно и относительно тепло. Не то, что сегодня... сегодня погода испортилась и снова стало холодно. К…

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 9 comments