Yii mssql UTF8

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
Ujin
Сообщения: 6
Зарегистрирован: 2012.12.26, 16:13

Yii mssql UTF8

Сообщение Ujin » 2012.12.26, 16:47

Доброго времени суток.

Недавно решил опробовать Yii с целью дальнейшего использования данного фреймворка в проектах. Пока все очень нравится но есть одна маленькая закавыка которую хотелось бы реализовать "красиво" не редактируя код фреймворка.
В связке php+php_pdo_sqlsrv_53_ts_vc9.dll+mssql поддерживается работа в UTF-8 через параметры PDO::SQLSRV_ATTR_ENCODING=>PDO::SQLSRV_ENCODING_UTF8 и "CharacterSet" => "UTF-8". При классическом подключении это реализуется так:

Код: Выделить всё

$options = array(PDO::SQLSRV_ATTR_ENCODING=>PDO::SQLSRV_ENCODING_UTF8, "CharacterSet" => "UTF-8");  
 
try 
{ 
    $conn = new PDO( "sqlsrv:Server=".$serverName.";", $name, $pass,  $options); 
} 
catch(Exception $e) 
{ 
    die( print_r( $e->getMessage() ) ); 
}
Вопрос: как задать параметры PDO::SQLSRV_ATTR_ENCODING=>PDO::SQLSRV_ENCODING_UTF8 и "CharacterSet" => "UTF-8" в main.php фреймворка. Нужный фрагмент у меня сейчас выглядит так:

Код: Выделить всё

'db'=>array(
            'connectionString' => 'sqlsrv:Server=Server',
            'username' => 'username',
            'password' => 'password',
            'charset' => 'UTF-8',
        )

Аватара пользователя
samdark
Администратор
Сообщения: 8621
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii mssql UTF8

Сообщение samdark » 2012.12.26, 17:07

Код: Выделить всё

'attributes' => array(
  PDO::SQLSRV_ATTR_ENCODING=>PDO::SQLSRV_ENCODING_UTF8,
  "CharacterSet" => "UTF-8",
),
 

Ujin
Сообщения: 6
Зарегистрирован: 2012.12.26, 16:13

Re: Yii mssql UTF8

Сообщение Ujin » 2012.12.27, 09:54

Спасибо, помогло. Пока mssql с yii через UTF-8 работает нормально.
Если кого-то интересует детальная настройка, обращайтесь.

Аватара пользователя
samdark
Администратор
Сообщения: 8621
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii mssql UTF8

Сообщение samdark » 2012.12.27, 11:53

С этим бывают проблемы, так что, думаю, не лишним будет.

Ujin
Сообщения: 6
Зарегистрирован: 2012.12.26, 16:13

Re: Yii mssql UTF8

Сообщение Ujin » 2012.12.28, 15:07

Для корректного обмена данными между mssql и yii с использованием кодировки UTF-8 мне понадобилось:
1. Осознать что на данный момент нету драйвера для подключения php к mssql из-под linux, который можно было-бы использовать в коммерческих проектах. В связи с чем придется отказаться от удобной и привычной платформы для разработки в Ubuntu.
2. Один из драйверов mssql для php, предлагаемых компанией Microsoft
Важно разобраться что из этих драйверов нам нужно (источник по которому я разбирался тут выложу только основное):
На странице загрузки предлагают 2 архива:
SQLSRV20.EXE (Версия 2.0) - работает только c mssql 2008, поддерживает php версий 5.2 и 5.3.
SQLSRV30.EXE (Версия 3.0) - работает только с mssql 2012, поддерживает php версий 5.3 и 5.4.
Как видно выше, в зависимости от сервера mssql возможно придется корректировать версию php.
При распаковке архива можно видеть несколько библиотек, из названия которых можно выбрать одну нужную. Мне подошла php_pdo_sqlsrv_53_ts_vc9. По фрагментам имени: pdo - для работы yii, 53 - версия 5.3., ts - Thread Safe, vc9 - версия компилятора.Всю эту информацию можно посмотреть в phpinfo().
3. Связка веб-сервера и php на ОS Windows: сначала я пробовал IIS Express и WebMatrix2 но субъективная нелюбовь к продуктам компании Microsoft и опять таки субъективное впечатление медленного выполнения php скриптов на этих связках заставило меня поставить Apache ну и php нужной версии соответственно.
4. Скопировать в папку с расширениями php (у меня это c:\php5\ext) файл который мы выбрали в п. 2.
5. В php.ini должны быть прописаны 2 строки на подобии приведенных ниже

Код: Выделить всё

extension_dir = "c:\php5\ext"
extension=php_pdo_sqlsrv_53_ts_vc9.dll
6. Проверить настройки mssql на предмет открытия внешних подключений, если нужно включить их.
7. В main.php проекта на yii прописать подобное к такому

Код: Выделить всё

'db'=>array(
            'connectionString' => 'sqlsrv:Server=server\mssql;Database=db',
            'username' => 'i_username',
            'password' => 'i_password',
            'charset' => 'utf-8',
            'attributes' => array(
                PDO::SQLSRV_ATTR_ENCODING=>PDO::SQLSRV_ENCODING_UTF8,
                "CharacterSet" => "UTF-8",
            ),
        ),    
P.S. на усмотрение администрации, можно перенести этот пост наверх или в отдельную тему.

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii mssql UTF8

Сообщение lancecoder » 2012.12.28, 16:24

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

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii mssql UTF8

Сообщение lancecoder » 2012.12.28, 16:45

apt-get install php5-mssql
это драйвер пхп

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii mssql UTF8

Сообщение lancecoder » 2012.12.28, 16:48

http://www.google.ru/url?sa=t&rct=j&q=% ... GE&cad=rjt
только aptitude может не работать ей надо пакет какойто (у меня не работает - тольк apt-get)
а вообще это в винде все от линукса в плане веб серверов и разработки (не беру в счет IIS), так что на винде нужен бубен

Ujin
Сообщения: 6
Зарегистрирован: 2012.12.26, 16:13

Re: Yii mssql UTF8

Сообщение Ujin » 2012.12.28, 16:49

lancecoder писал(а):на счет убунту,в ы просто не разобрались, там ини файлы создаются на каждую либу, либо же в пхп ини прописывате ссылку на .so


.so - по моим данным не существует, а про ини на каждую либу если можно то по-подробнее.
lancecoder писал(а):apt-get install php5-mssql
это драйвер пхп
не работает для php версий выше 5.2

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii mssql UTF8

Сообщение lancecoder » 2012.12.28, 16:49

а угнал, никада не юзал mssql, это микрософтская шляпа, ну тогда она виндовая :) но все же проблем не должно быть

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii mssql UTF8

Сообщение lancecoder » 2012.12.28, 16:51

мой лог

Код: Выделить всё

root@comp:/home/lancecoder# apt-get install php5-mssql
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'php5-sybase' instead of 'php5-mssql'
The following packages were automatically installed and are no longer required:
  dkms lib32gcc1 libboost-dev libc6-i386 linux-headers-3.5.0-19
  linux-headers-3.5.0-19-generic mongodb-clients mongodb-dev mongodb-server
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  freetds-common libsybdb5
The following NEW packages will be installed:
  freetds-common libsybdb5 php5-sybase
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 247 kB of archives.
After this operation, 679 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://ru.archive.ubuntu.com/ubuntu/ quantal/main freetds-common all 0.91-1build1 [25.4 kB]
Get:2 http://ru.archive.ubuntu.com/ubuntu/ quantal/main libsybdb5 amd64 0.91-1build1 [194 kB]
Get:3 http://ru.archive.ubuntu.com/ubuntu/ quantal-updates/universe php5-sybase amd64 5.4.6-1ubuntu1.1 [27.5 kB]
Fetched 247 kB in 1s (195 kB/s)   
Selecting previously unselected package freetds-common.
(Reading database ... 278571 files and directories currently installed.)
Unpacking freetds-common (from .../freetds-common_0.91-1build1_all.deb) ...
Selecting previously unselected package libsybdb5:amd64.
Unpacking libsybdb5:amd64 (from .../libsybdb5_0.91-1build1_amd64.deb) ...
Selecting previously unselected package php5-sybase.
Unpacking php5-sybase (from .../php5-sybase_5.4.6-1ubuntu1.1_amd64.deb) ...
Processing triggers for man-db ...
Setting up freetds-common (0.91-1build1) ...
Setting up libsybdb5:amd64 (0.91-1build1) ...
Setting up php5-sybase (5.4.6-1ubuntu1.1) ...

Creating config file /etc/php5/mods-available/mssql.ini with new version

Creating config file /etc/php5/mods-available/pdo_dblib.ini with new version
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

вот как видно ини /etc/php5/mods-available/mssql.ini
но я обычно правлю пхп.ини
ос 12.10
репы тока каноникал

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii mssql UTF8

Сообщение lancecoder » 2012.12.28, 16:58

http://upload-screenshot.com/di-4F7L.png
вот видно результат

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Yii mssql UTF8

Сообщение lancecoder » 2012.12.28, 17:20

Ujin писал(а): .so - по моим данным не существует, а про ини на каждую либу если можно то по-подробнее.

Код: Выделить всё

lancecoder@comp:/usr/lib/php5/20100525$
curl.so        intl.so        mssql.so       pdo.so         sqlite3.so
gd.so          mcrypt.so      mysqli.so      pdo_sqlite.so  tidy.so
gearman.so     memcache.so    mysql.so       pspell.so      xmlrpc.so
imagick.so     ming.so        pdo_dblib.so   recode.so      xsl.so
imap.so        mongo.so       pdo_mysql.so   snmp.so       
вот эта папка я не знаю с чем связано ее имя, но у меня она так 20100525
апд: 25 мая 2010 :) но почему именно это число я чесно хз, может версия пхп влияет

Ujin
Сообщения: 6
Зарегистрирован: 2012.12.26, 16:13

Re: Yii mssql UTF8

Сообщение Ujin » 2012.12.28, 17:28

lancecoder писал(а):а угнал, никада не юзал mssql, это микрософтская шляпа, ну тогда она виндовая :) но все же проблем не должно быть
Эх, это 1 в 1 мои мысли неделю назад :D

Аватара пользователя
Altenrion
Сообщения: 44
Зарегистрирован: 2013.03.18, 12:05
Контактная информация:

Re: Yii mssql UTF8

Сообщение Altenrion » 2015.09.08, 10:30

Понимаю что у топика борода по дороге стелится, но раз я на нее вышел, то и прочие могут. "вот эта папка я не знаю с чем связано ее имя, но у меня она так 20100525" - это номер API компиляции php. PHP compiled with module API=20100525

При сборке php из исходников, создается папка с номером соответствующим апи компиляции. И модули кладутся в нее. Если в php.ini не менять extension_dir то по умолчанию ищется именно эта папка. Каждая версия php имеет свой номер api и соответственно модули разных версий будут лежать отдельно.

Ответить