区分大小写的表名称

时间:2011-10-24 13:34:13

标签: mysql phpmyadmin yii case-sensitive

在那里我做了轨道明星应用程序,一切正常,除了一个我面临错误的问题 CDbCommand failed to execute the SQL statement: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'devnmark_root.AuthAssignment' doesn't exist. The SQL statement executed was: SELECT * FROM 'AuthAssignment' WHERE userid=:userid

现在,当我检查if(Yii::app()->user->checkAccess('createUser',array('project'=>$model))) 18 { 19 $this->menu[] = array('label'=>'Add User To Project','url'=>array('adduser', 'id'=>$model->id)); 20 }

时,这是由Yii自动生成的

然后我去了phpmyadmin并手动执行了这个查询

SELECT * FROM AuthAssignment WHERE userid=4并且存在错误,表明该表不存在。

如果我使用小写字母表格,那么没有错误。

我在本地wamp的phpmyadmin上执行相同的查询同一个查询没有显示任何错误,所以很明显我的sql有错误。想法我该怎么解决?

5 个答案:

答案 0 :(得分:1)

我建议您点击SQL_MODE文档来设置最终选项。 http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html

对于测试,你可以做一个:

SET sql_mode = '';

或者调整命令行:

--sql-mode=""

答案 1 :(得分:1)

您可以尝试将系统变量*lower_case_table_names*设置为1。

答案 2 :(得分:1)

我的本​​地应用程序是在Windows下开发的,howerver生产在Linux下,我也遇到了同样的问题。 对我来说,这是因为区分大小写 - 数据库中的表 AuthAssignment 实际上是 authassignment

我找到了两个解决方案: 将数据库表从authassignment重命名为AuthAssignment 要么 编辑配置文件组件部分:

'components'=>array(
...
    'user'=>array(...
    ),
    'authManager'=>array(
     ...
     'assignmentTable'=>'authassignment' //THIS LINE SOLVED MY PROBLEM
),

答案 3 :(得分:0)

我有同样的问题,即不存在自动分配表,我忘了运行权限安装,在我的情况下是通过跟踪URL,即

/index.php/rights/install

然后设置就像一个微风和自我解释:)

答案 4 :(得分:0)

对我来说,这个答案帮助最多:original source

在config / main.php的authManager中,您可以添加表格的小写名称,如下所示:

'components'=>array(
    'authManager'=>array(
        'defaultRoles'=>array('guest'),
        'class'=>'RDbAuthManager',
        'assignmentTable'=>'authassignment',
        'itemTable'=>'authitem',
        'rightsTable'=>'rights',
        'itemChildTable'=>'authitemchild',
),