Php 在Windows上连接到MySQL时,数组索引会发生变化,但在Linux上不会

Php 在Windows上连接到MySQL时,数组索引会发生变化,但在Linux上不会,php,mysql,cakephp,cakephp-2.0,Php,Mysql,Cakephp,Cakephp 2.0,当我将本地工作副本Windows 7、WAMP、Apache 2.2、MySQL 5.1、PHP 5.3、CakePHP 2.4连接到本地MySQL数据库时,会出现以下错误: 注意8:未定义索引:Asset[APP\Controller\assetcontroller.php,第241行] 注意,当连接到远程RHEL MySQL 5.1服务器时,问题本身并不存在 有关守则: 第241行:“EnvironmentDeploymentStatus.asset\u id'=>$conf['asset'

当我将本地工作副本Windows 7、WAMP、Apache 2.2、MySQL 5.1、PHP 5.3、CakePHP 2.4连接到本地MySQL数据库时,会出现以下错误:

注意8:未定义索引:Asset[APP\Controller\assetcontroller.php,第241行]

注意,当连接到远程RHEL MySQL 5.1服务器时,问题本身并不存在

有关守则:

第241行:“EnvironmentDeploymentStatus.asset\u id'=>$conf['asset']['asset\u id']

当连接到RHEL MySQL 5.1,执行var_dump$conf时,我将得到以下结果:

array (size=3)
  'Asset' => 
    array (size=6)
当连接到本地主机Windows MySQL 5.1,执行var_dump$conf时,我会注意到数组键中的大小写更改:

array (size=3)
  'asset' => 
    array (size=6)
填充$conf的视图包含以下内容:

...
from    
    (((((((`assets` `asset`
...
我在本地MySQL的my.ini文件中添加了以下配置: 小写字母表名称=2

这些表已经是小写的,并且符合CakePHP标准,但是我不认为这对我的工作有任何影响。

小写的table\u names=2可能是您的问题。文件上写着

此选项也适用于数据库名称和表别名

重点补充

这意味着MySQL正在将Cake提供的表别名更改为小写版本


解决方案是将该值设置回建议值1。

在我将小写字母表名称设置为2之前,它就是这样做的。我把它改成这个,希望能纠正这个问题。现在,它在1,它仍然做同样的事情。我完全删除了它,看起来1是默认值。你能试着将它设为0吗?这篇文档说Unix上的默认值是0。同一篇文档指出,在Windows上不应该将其设置为0,这是关于索引损坏的。我认为这只是针对MyISAM引擎的,我就是这样读的。我想我假设你在InnoDB上-这是默认的,对吗?其他开发人员有时会将他们的表留在MyISAM中,而他们应该在InnoDB中。我只是想知道,当有人发现这一点并将其转换为InnoDB时,会发生什么。在我的应用程序的上下文中,并且它是本地副本,我认为这实际上可能有效。在任何情况下,我都将其设置为0,但继续看到小写资产。我已经确认,在Workbench中,该值为0。这是影响所有模型还是仅影响资产?@isick在这个特定实例中,似乎只有那个。要注意的是,我重新导入设置为0,重新加载我的页面,键现在有一个大写的第一个字母。非常奇怪。我想知道在你第一次做更改后,它是在读缓存还是什么。。。不管怎样,很高兴事情解决了!