Для корректного обмена данными между 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. на усмотрение администрации, можно перенести этот пост наверх или в отдельную тему.