1

当我尝试以小写形式查询我的 MySQL 表时出现错误:

mysql> select * from selection_vc limit 1;
ERROR 1146 (42S02): Table 'mydb.selection_vc' doesn't exist

当我使用大写时,一切正常:

mysql> select * from SELECTION_VC limit 1;
+-------------+-------------+-------------+--------+
| CAMPAIGN_ID | CONTACT_ID  | COLUMN_NAME | MONTH  |
+-------------+-------------+-------------+--------+
| ALCA-32515W | ALCA-2X08DX | A           | 201207 |
+-------------+-------------+-------------+--------+
1 row in set (0.00 sec)

我只有在表名上有这个错误(功能?),列名可以以小写或大写形式访问。这只发生在我在 Linux 上安装的数据库中,我的 Mac 上的数据库没有这个问题。

我错过了 MySQL 配置中的某些内容还是这是一个错误?

4

1 回答 1

5

如手册的标识符大小写敏感性部分所述:

在 MySQL 中,数据库对应于数据目录中的目录。数据库中的每个表对应于数据库目录中的至少一个文件(可能更多,取决于存储引擎)。触发器也对应于文件。因此,底层操作系统的大小写敏感性在数据库、表和触发器名称的大小写敏感性中起作用。这意味着此类名称在 Windows 中不区分大小写,但在大多数 Unix 中都区分大小写。一个值得注意的例外是 Mac OS X,它基于 Unix,但使用不区分大小写的默认文件系统类型 (HFS+)。

它接着说:

为避免因数据库或表名的字母大小写引起的数据传输问题,您有两种选择:

  • lower_case_table_names=1在所有系统上使用。这样做的主要缺点是,当您使用SHOW TABLESor时SHOW DATABASES,您看不到原始字母大小写的名称。

  • lower_case_table_names=0在 Unix 和lower_case_table_names=2Windows 上使用。这将保留数据库和表名的字母大小写。这样做的缺点是您必须确保您的语句在 Windows 上始终以正确的字母大小写引用您的数据库和表名。如果您将语句转移到字母大小写很重要的 Unix,如果字母大小写不正确,它们将不起作用。

    例外:如果您正在使用InnoDB表并试图避免这些数据传输问题,则应lower_case_table_names在所有平台上设置为 1 以强制将名称转换为小写。

于 2012-07-04T10:18:37.377 回答