MySQL外键的引用表名总是强制为小写

时间:2010-08-11 01:01:16

标签: mysql foreign-keys case-sensitive

首先,创建这两个表:

CREATE TABLE IF NOT EXISTS TAB_COMPANY (
  ID INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(100) NOT NULL,
  PRIMARY KEY(ID),
  UNIQUE KEY(NAME)
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

CREATE TABLE IF NOT EXISTS TAB_DEPARTMENT (
  ID INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(100) NOT NULL,
  COMPANYID INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY(ID),
  INDEX FK_TAB_DEPARTMENT_TAB_COMPANY_COMPANYID(COMPANYID ASC),
  CONSTRAINT FK_TAB_DEPARTMENT_TAB_COMPANY_COMPANYID
    FOREIGN KEY (COMPANYID) REFERENCES TAB_COMPANY(ID) ON DELETE CASCADE
) ENGINE=INNODB DEFAULT CHARSET=UTF8;

然后显示create table TAB_DEPARTMENT:

CREATE TABLE `TAB_DEPARTMENT` (
  `ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `NAME` varchar(100) NOT NULL,
  `COMPANYID` int(10) unsigned NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `FK_TAB_DEPARTMENT_TAB_COMPANY_COMPANYID` (`COMPANYID`),
  CONSTRAINT `FK_TAB_DEPARTMENT_TAB_COMPANY_COMPANYID` FOREIGN KEY (`COMPANYID`)
REFERENCES `tab_company` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8

外键引用子句中的表名被强制为小写。

mysql> show variables like '%lower%';
lower_case_file_system ON
lower_case_table_names 0

mysql> show variables like 'version';
version 5.1.43-community

我的平台是带XP的Window XP。我在Linux上测试了这个,没关系。

以前有人遇到过这个问题吗?我已经向MySQL报告了一个错误。

我刚试过版本5.1.49-community,问题仍然存在。

1 个答案:

答案 0 :(得分:1)

得到了MySQL的回复:

  

来自Miguel Solorzano:

     

感谢您提供错误报告。这是对InnoDB的记录限制   表:

     

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

     

“在Windows上,InnoDB始终在内部存储数据库和表名称   小写的。将数据库以二进制格式从Unix移动到Windows   或者从Windows到Unix,您应该创建所有数据库和表   使用小写名称。 “