Для PostgreSQL

pgsql://user:password@host[:port]|[local]/database?
   charset=значение&
   ClientCharset=кодировка& [3.1.2]
   autocommit=1&   [3.3.0]
   standard_conforming_strings=0&   [3.4.3]
   datestyle=ISO,SQL,Postgres,European,US,German [
по умолчанию ISO]

Необязательные параметры:
port - номер порта.

Можно задать:
user:password@host:port/database,

а можно:
user:password@local/database

В этом случае произойдет соединение с сервером, расположенным на локальной машине.

charset - сразу после соединения с сервером выполняет команду «SET CLIENT_ENCODING=значение»;
ClientCharset - задает кодировку, в которой необходимо общаться с SQL-сервером, перекодированием занимается драйвер;
autocommit - по умолчанию Parser автоматически выполняет COMMIT после каждого успешно выполненного запроса. Если указать опцию autocommit=0, то такое поведение будет изменено и все запросы, написанные внутри одного оператора connect будут выполняться в рамках одной транзакции;
datestyle - если задан этот параметр, то сразу после соединения с сервером драйвер выполнит команду «SET DATESTYLE=значение»
standard_conforming_strings 
- если установлен в 1, то отключается эскейпинг символа '\' для соответствия SQL стандартам.

Пример: перекодирование средствами SQL сервера (рекомендуется)
Допустим данные в вашей базе хранятся в кодировке UTF-8, а сайт работает в кодировке windows-1251, в этом случае нужно использовать следующую строку подключения:
pgsql://user:password@host/database?charset=win

В этом случае сразу после соединения SQL серверу будет выдана команда «SET CLIENT ENCODING=win» и сервер сам будет перекодировать принимаемые данные из кодировки win в кодировку, в которой данных хранятся у него в таблице и обратно.

Внимание: в данном случае вы должны указать кодировку, в которой работает сайт.
Внимание: данная опция выполняет команду PgSQL, поэтому необходимо использовать названия кодировок PgSQL сервера, которые отличаются от названий кодировок Parser, определяемых вами в конфигурационном файле.


Пример: перекодирование драйвером (работает со всеми версиями PgSQL сервера)
В некоторых редких случаях бывает, что невозможно использовать функции перекодирования, предоставляемые PgSQL сервером. Тогда можно задействовать механизмы перекодирования драйвера, используя опцию ClientCharset.
Допустим, данные в вашей базе хранятся в кодировке
windows-1251, а сайт работает в кодировке koi8-r, в этом случае можно использовать такую строку подключения:
pgsql://user:password@host/database?ClientCharset=windows-1251

В этом случае отправляемые SQL серверу данные будут перекодироваться драйвером из кодировки $request:charset (в данном примере koi8-r) в кодировку windows-1251, а принимаемые от SQL сервера данные - обратно.

Внимание: в данном случае вы должны указать кодировку, в которой данные хранятся в базе данных.
Внимание: в данной опции вы должны указывать названия кодировок Parser, которые определяются вами в конфигурационном файле.



User comments:

Sumo 07.06.2017 19:24

В драйвере реализованы два механизма работы с транзакциями. С параметром autocommit и с недокументированным параметром WithoutDefaultTransaction. Можно использовать только какой-то один механизм.

Если использовать autocommit, то Парсер сам открывает и комитит транзакции при запросах.

С параметром WithoutDefaultTransaction Парсер отдает всю работу с транзациями в руки программиста и Постгреса. По умолчанию (без BEGIN) PostgreSQL выполняет транзакции в режиме «autocommit» (автофиксация), то есть каждый оператор выполняется в своей отдельной транзакции, которая неявно фиксируется в конце оператора (если оператор был выполнен успешно; в противном случае, транзакция откатывается).


Sumo 13.04.2016 11:13

standard_conforming_strings=1 надо задавать для соединения со всеми версиями Постгреса начиная с 9.1, потому что в конфиге установлено значение standard_conforming_strings=on.

Подробности в http://postgrespro.ru/doc/sql-syntax-lexical.html


In order to add comments you must register.
Copyright © 1997–2021 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 23.10.2013