MySQL和信件案例

时间:2012-07-04 10:16:36

标签: mysql linux

当我尝试以小写形式查询我的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配置中的内容或者这是一个错误?

1 个答案:

答案 0 :(得分:5)

如手册的Identifier Case Sensitivity部分所述:

  

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

接着说:

  

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

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

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

         

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

  •