CakePHP在许多“SET CHARACTER SET utf8”查询中查找调用结果。为什么?

时间:2011-06-13 02:43:33

标签: mysql cakephp utf-8 find

CakePHP连续38次查询“SET CHARACTER SET utf8”进行简单查找(“all”)(递归属性默认为0)的原因是什么?

我使用MySQL作为数据库,假设我创建了一个如下所示的用户表:

CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
username char(50) UNIQUE,
password char(40),
post_id INT,
created DATETIME,
modified DATETIME,
CONSTRAINT PRIMARY KEY (id),
CONSTRAINT FOREIGN KEY (post_id) REFERENCES posts (id)
    ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB;

和一个看起来像这样的帖子表:

CREATE TABLE posts (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(30) NOT NULL,
content TEXT NOT NULL,
CONSTRAINT PRIMARY KEY (id)
) ENGINE=INNODB;

在我的users_controller.php中,我写了一个动作:

$log = $this->User->getDataSource()->getLog(false, false);
$this->User->find("all",
array(
   'conditions' => array('id' => 3),
   'recursive' => 0
));
debug($log);

我没有用上面的数据对此进行测试,但是显示了上面的表格,因为它们与我当前的数据库类似。我使用25个表与engine = innodb。

debug是一个包含41个查询的数组,其中2个查询检索用户和帖子。其他39个查询是相同的,如下所示:

    Array
(
    [log] => Array
    (
        [0] => Array
            (
                [query] => SET CHARACTER SET utf8;
                [error] => 
                [affected] => 0
                [numRows] => 
                [took] => 0
            )

        [1] => Array
            (
                [query] => SET CHARACTER SET utf8;
                [error] => 
                [affected] => 0
                [numRows] => 
                [took] => 0
            )
                 .
                 .
                 .
            [38] => Array
            (
                [query] => SET CHARACTER SET utf8;
                [error] => 
                [affected] => 0
                [numRows] => 
                [took] => 0
            )

这应该发生吗?在我的config / database.php文件中,如果我将编码设置为'utf8'并不重要。我确实想要'utf8',但我不想要38个不必要的查询。

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'mylogin',
    'password' => 'mypassword',
    'database' => 'mydatabase',
            'encoding' => 'utf8'
);

2 个答案:

答案 0 :(得分:1)

预计这种事情会在调试中,蛋糕使用信息来工作。当你关闭调试它应该全部消失

答案 1 :(得分:1)

问题解决了。这是我的错误。 AppModel中的构造函数有一行:

$this->query( "SET CHARACTER SET utf8;" );