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

标签 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;

然后显示创建表 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

我的平台是带有 SP3 的 Window XP。我在 Linux 上测试过,没问题。

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

刚试了5.1.49-community版本,问题依旧。

最佳答案

得到MySQL的回复:

From Miguel Solorzano:

Thank you for the bug report. This a documented restriction of InnoDB table:

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

"On Windows, InnoDB always stores database and table names internally in lowercase. To move databases in a binary format from Unix to Windows or from Windows to Unix, you should create all databases and tables using lowercase names. "

关于MySQL 外键引用的表名总是强制小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454590/

相关文章:

mysql - 使用 GROUP BY 进行 SELECT 并显示两个表的总计

具有延迟外键的 Android Room

java - Hibernate外键映射?

cmake - 为什么 CMake 变量区分大小写而命令不区分大小写?

amazon-s3 - S3 x-amz-meta- 区分大小写

java - 值在提交时发生变化。 |可调用语句

mysql - Laravel 中库存系统的数据库设计

mysql - 直接将图像存储在数据库中还是作为base64数据?

MySQL:外键约束在 InnoDB 中被忽略

sql - Oracle-选择字段具有小写字符的位置