使用SQL Server与PHP蛋糕:编码问题


Use SQL Server with PHP Cake : Encoding problem

我必须使用MS SQL Server 2008来存储PHP CAKE应用程序的数据。

我成功安装了微软的PDO驱动程序和PHP蛋糕的dbo数据源。

我的应用程序与服务器通信。

但是我有一些编码问题,我不知道如何管理。

我做了一些研究,似乎SQL server并不真正支持varchar字段的utf8(如果我理解正确的话)。

SQL Server告诉我,与"SELECT SERVERPROPERTY('Collation')"查询,我有French_CI_AS编码(这似乎是正确的)。

我做了一些搜索php蛋糕配置,似乎我们可以为数据库配置指定一个"encoding"参数(在app/config/database.php中)。我尝试将其设置为French_CI_AS和utf8,但它没有改变任何东西,我的页面上仍然有无法识别的字符。

我不确定sql server数据源是否实际使用了这个参数,所以我搜索了dbo_sqlsrv.php,并找到了一个"charset"属性,所以我将其设置为"SELECT TABLE_NAME FROM INFORMATION_SCHEMA"。TABLES",但现在我有另一个错误,蛋糕找不到我的表:

警告(2):sqlsrv_query()期望参数1是资源,[CORE'cake'libs'model'datasources'dbo'dbo_sqlsrv.php]警告(512):SQL错误:一个无效的参数被传递给sqlsrv_query。核心'[蛋糕' libs ' '数据源模型' dbo_source.php,线查询:SELECT TABLE_NAME FROM INFORMATION_SCHEMA。表
缺少数据库表错误:模型的数据库表监视器没有找到Moniteur。注意:如果您想自定义此错误消息,创建app'views'errors'missing_table.ctp

但是如果我自己运行这个命令,我清楚地看到这个表:

TABLE_NAME

汽车修理工

通报》

(受影响的2行)

如你所见,我的表名中甚至没有任何非ascii字符

所以我有点迷路,我不知道现在去哪里找,你有什么主意吗?

谢谢!

我终于找到解决办法了!

我必须将所有字段转换为nvarchar而不是varchar,并将php数据库配置文件的字符集设置为"UTF-8"("-"很重要):

var $default = array(
        'driver' => 'sqlsrv',
        'host' => 'localhost',
        'login' => 'myUser',
        'password' => 'myPassword',
        'database' => 'myDatabase',
        'prefix' => '',
        'charset'=>'UTF-8'
    );

现在一切都以正确的编码出现了!