这是StackOverFlow中的第一个问题
MyEnvironment 我的环境 Centos7 Yii2.0.9 PHP7.0.9 MSsql使用PDODBLib和FreeTDS 连接正常表显示正常(Where子句无效) 我认为PHP7一切都好 但是如果Where子句存在则不起作用
调试/日志选项卡显示如下:
SELECT COUNT(*) FROM [pw26] WHERE ([w26_kind]=7) AND ([w26_title] LIKE 0x25ed8c9c25)
在PHP 5.6之前显示:
SELECT COUNT(*) FROM [pw26] WHERE ([w26_kind]=7) AND ([w26_title] LIKE '%팜%')
仅在非英语单词中出现
我发现这个Yii2 / db / Schema.php
public function quoteValue($str)
{
if (!is_string($str)) {
return $str;
}
if (($value = $this->db->getSlavePdo()->quote($str)) !== false) {
return $value;
} else {
// the driver doesn't support quote (e.g. oci)
return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'";
}
}
顶部代码更改如下
if (($value = $this->db->getSlavePdo()->quote($str)) !== false) {
AFER:
if (false) {
最终调试/日志选项卡显示如下:
SELECT COUNT(*) FROM [pw26] WHERE ([w26_kind]=7) AND ([w26_title] LIKE '%팜%')
但是,仍然没有出现数据。
答案 0 :(得分:0)
Freetds管理来自verison 7.0的charset。编辑/etc/freetds/freetds.conf或将版本参数添加到数据库设置'dsn'。
Charset属性不适用于MS SQL,您必须将其添加到'dsn'。
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'dblib:version=7.0;host=192.168.1.2;dbname=devdb;charset=UTF-8',
'username' => 'devuser',
'password' => 'devpasswd',
//'charset' => 'UTF-8'
],