将SQL Server与PHP Cake一起使用:编码问题

时间:2011-07-15 07:32:59

标签: php sql-server cakephp encoding character-encoding

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

我成功安装了用于PHP的Microsoft PDO驱动程序和php cake的dbo数据源。

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

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

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

SQL Server告诉我,使用“SELECT SERVERPROPERTY('Collat​​ion')”查询,我使用了French_CI_AS编码(这似乎是正确的)。

我做了一些搜索php cake config,看来我们可以为数据库配置指定一个“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,   第185行]警告(512):SQL错误:传递了无效参数   sqlsrv_query。 [CORE \ cake \ libs \ model \ datasources \ dbo_source.php,line   684]查询:SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
  缺少数据库表错误:模型的数据库表moniteurs   没有找到Moniteur。注意:如果要自定义此错误   消息,创建app \ views \ errors \ missing_table.ctp

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

  

TABLE_NAME

     

garagistes

     

moniteurs

     

(2行(s)受影响)

并且你可以看到,我的表名中甚至没有任何非ascii字符。

所以我很少迷路,我现在不知道在哪里搜索,你有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

我终于找到了解决方案!

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

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

现在一切都以正确的编码显示!