我必须使用MS SQL Server 2008来存储PHP CAKE应用程序的数据。
我成功安装了用于PHP的Microsoft PDO驱动程序和php cake的dbo数据源。
我的应用程序与服务器通信。
但我对编码有一些问题,我不知道如何管理。
我做了一些研究,似乎SQL服务器并不真正支持utf8用于varchar字段(如果我正确理解的话)。
SQL Server告诉我,使用“SELECT SERVERPROPERTY('Collation')”查询,我使用了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字符。
所以我很少迷路,我现在不知道在哪里搜索,你有什么想法吗?
谢谢!
答案 0 :(得分:4)
我终于找到了解决方案!
我必须转换nvarchar中的所有字段而不是varchar,并将我的php数据库配置文件的字符集设置为" UTF-8"(" - "是重要的):
var $default = array(
'driver' => 'sqlsrv',
'host' => 'localhost',
'login' => 'myUser',
'password' => 'myPassword',
'database' => 'myDatabase',
'prefix' => '',
'charset'=>'UTF-8'
);
现在一切都以正确的编码显示!