在 Windows 上连接到 MySQL 时数组索引会改变大小写,但在 Linux 上不会

Array index changes case when connecting to MySQL on Windows, but not on Linux

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

Notice (8): Undefined index: Asset [APP\Controller\AssetsController.php, line 241]

请注意,当连接到远程 RHEL MySQL 5.1 服务器时,问题不会 出现。

有问题的代码:

Line 241: 'EnvironmentDeploymentStatus.asset_id'=>$conf['Asset']['asset_id'],

当连接到 RHEL MySQL 5.1 时,执行 var_dump($conf),我会得到这个:

array (size=3)
  'Asset' => 
    array (size=6)

当连接到 localhost Windows MySQL 5.1 时,执行 var_dump($conf),我会得到这个(注意数组键中的大小写更改):

array (size=3)
  'asset' => 
    array (size=6)

填充 $conf 的视图包含以下内容:

...
from    
    (((((((`assets` `asset`
...

我在本地 MySQL 的 my.ini 文件中进行了以下配置: lower_case_table_names=2

表格已经是小写了(并且符合 CakePHP 标准),不过我认为这对我正在做的事情没有任何影响。

lower_case_table_names = 2 可能是您的问题。它在文档中说

This option also applies to database names and table aliases.

(强调)

MySQL Doc on lower_case_table_names

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

解决方法是将此值设置回推荐值 1。