【问题标题】:MsSQL encoding issueMsSQL 编码问题
【发布时间】:2012-08-22 07:01:46
【问题描述】:

我在 MsSQL 中有一个数据库,我通过 PDO 对象从我的 PHP 代码连接到该数据库。 数据库有“Kadź”列。

现在 - 如果我执行一个

SELECT Kadź FROM <tablename>

来自我的 SQL Server Management Studio 的查询 - 一切正常,我得到了结果。 但是,当我尝试执行

$sql = "SELECT Kadź FROM <tablename>";

我收到了

SQLSTATE[HY000]:一般错误:207 一般 SQL Server 错误:检查来自 SQL Server [207](严重性 16)[(null)]的消息

错误。 查询任何其他列不会产生任何问题,但这一列会。我怀疑这是因为该列名称中的“ź”字符在我的 PHP 代码和数据库之间的路径上编码不正确。

我的服务器使用的排序规则是“Polish_Cl_Al”。 我尝试通过添加属性来修复它

$this->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAME'utf8'");

但是 PDO 回答我,驱动程序不支持它...

提前感谢您的帮助

【问题讨论】:

  • 你的 PHP 文件的编码是什么:波兰语还是 UTF-8?
  • 我的php编码是utf-8

标签: php sql-server pdo


【解决方案1】:

你可以试试:

$pdo = new PDO('dblib:host=localhost;dbname=databasename;charset=UTF-8', 'username', 'password');

或(对于 Windows)

$smth->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);

【讨论】:

  • 是的,我也试过了,我得到PHP Warning: PDO::__construct(): SQLSTATE[IM001]: Driver does not support this function: driver does not support setting attributes in ...
  • 谢谢。但是仍然 - General error: 195 General SQL Server error: Check messages from the SQL Server [195] (severity 15) [SET NAMES 'utf8']
  • 不幸的是它也没有改变任何东西。再次出现常规错误 207。
  • 对不起,我一定是瞎了眼,我第一次看到MySQL。试试那个命令,MsSQL 是 UTF-8
  • setAttribute .. ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多