У меня есть Linux-сервер Debian 6 с установленными Apache 2.2 и PHP 5.4. Мне нужно подключить мое приложение с MS SQL Server 2008.
Мое приложение использует Zend Framework 1.11 и charset UTF-8 (у меня будут пользователи со всех уголков мира, и они будут размещать данные на своем родном языке).
FRIST, я попытался использовать ODBC-драйвер Microsoft SQL Server для Linux. Он говорит только для Red Hat, но я следую этим инструкциям для установки:
http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/
Я мог бы подключиться и сделать некоторые выборки на нем, но я не мог вставлять в него данные. У меня возникла проблема с привязкой параметров к операторам pdo.
Вставить данные, подобные приведенным ниже, не помогло:
$stmt = $conn->prepare("insert into mar_regions (name) values (:name)"); $resp = $stmt->execute(array(':name' => $param));
Но если бы я использовал, как это, он работает:
$stmt = $conn->prepare("insert into mar_regions (name) values ('".$param."')"); $resp = $stmt->execute();
Поэтому я отказался от этого драйвера, потому что мое приложение ZF 1.11 не будет работать, если это произойдет.
SECOND, я пытаюсь использовать драйвер PDO для FreeTDS. Это работает нормально, и я могу использовать его в своем приложении ZF 1.11.
Но потом у меня появилась еще одна проблема: кодировки. Я настраиваю мой freeTDS.conf для использования UTF-8, меняю свои таблицы на использование NVARCHAR в VARCHAR и могу вставлять данные utf-8 следующим образом:
$stmt = $dbh->prepare("insert into mar_teste (name) values (N'ンから初・配信 € зеленый банан ÀÀÀÀáááááá')"); $resp = $stmt->execute();
Но, на моем ZF 1.11, я не могу передать этот атрибут «N» в запросах! Так что мое приложение все еще не работает.
Как видите, я все пробовал.
Поэтому мой вопрос : как подключиться к Linux, используя ZF 1.11 charset UTF-8, на MS SQL Server 2008?
Ответ на мой вопрос: Используйте freeTDS! Theres параметр для charset на нем:
[MyDSN] host = <<ip>> port = <<port>> # use 8.0 for newer versions of SQLSERVER tds version = 8.0 # text size don't need to be such a high value, its just an example text size = 4294967295 client charset = UTF-8
В Zend Framework настройте свое соединение следующим образом:
;; BANCO DE DADOS LINUX database.adapter = PDO_MSSQL database.params.pdoType = dblib database.params.host = MyDSN database.params.dbname = <<dbname>> database.params.username = <<username>> database.params.password = <<passwd>> database.params.driver_options.charset = UTF-8 database.isDefaultTableAdapter = true
Это решает проблему! 😉