我有一台 Linux 服务器 Debian 6,安装了 Apache 2.2 和 PHP 5.4。
我需要将我的应用程序与 MS SQL Server 2008 连接。
我的应用程序使用 Zend Framework 1.11 和字符集 UTF-8(我将拥有来自世界各地的用户,他们将用自己的语言输入数据)。
首先,我尝试使用适用于 Linux 的 Microsoft SQL Server ODBC 驱动程序。
它说仅适用于 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 将无法工作。
其次,我尝试使用 FreeTDS 的 PDO 驱动程序。这个工作正常,我可以在我的 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”属性!所以我的申请还是没有成功。
正如你所看到的,我尝试了一切。
所以我的问题是:如何在 MS SQL Server 2008 上使用 ZF 1.11 字符集 UTF-8 从 Linux 进行连接?