6

LinuxサーバーDebian6があり、Apache2.2とPHP5.4がインストールされています。アプリケーションをMSSQLServer2008に接続する必要があります。

私のアプリケーションはZendFramework1.11と文字セットUTF-8を使用しています(世界中のあらゆる場所からユーザーがいて、データを自分の言語で配置します)。

FRIST、Linux用のMicrosoft SQLServerODBCドライバーを使用しようとしました。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();

この場合、私のアプリケーションno ZF 1.11は機能しないため、このドライバーをあきらめました。

次に、FreeTDSにPDOドライバーを使用しようとしています。これは問題なく動作し、ZF1.11アプリケーションで使用できます。

しかし、その後、もう1つ問題が発生しました。それはcharsetsです。freeTDS.confをUTF-8を使用するように構成し、テーブルを変更してVARCHARの代わりにNVARCHARを使用し、次のようにutf-8データを挿入できます。

$stmt = $dbh->prepare("insert into mar_teste (name) values (N'ンから初・配信 € зеленый банан ÀÀÀÀáááááá')");
$resp = $stmt->execute();

しかし、私のZF 1.11では、この「N」属性をクエリに渡すことができません。そのため、私のアプリケーションはまだ機能しませんでした。

ご覧のとおり、私はすべてを試しました。

だから私の質問は:MS SQL Server2008でZF1.11文字セットUTF-8を使用してLinuxから接続する方法は?

4

1 に答える 1

4

私の質問に対する答えは次のとおりです。freeTDSを使用してください。その上に文字セットのパラメータがあります:

[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

それは問題を解決します!;)

于 2012-10-01T12:28:31.010 に答える