【问题标题】:MySQL alters table name caseMySQL 更改表名大小写
【发布时间】:2014-03-17 18:31:25
【问题描述】:

当我使用 MySQL Workbench 将我的模型转发工程为工作簿时,它会创建一个脚本文件,其中表的名称用引号引起来。表名都是大小写混合的,但是当脚本运行时,只有第一个表是混合大小写创建的,其余的只以小写形式创建。前面显示了 20 多个表中的前两个:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `CCBPlus` ;
USE `CCBPlus` ;

-- -----------------------------------------------------
-- Table `CCBPlus`.`Contacts`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CCBPlus`.`Contacts` (
  `ContactId` INT(11) NOT NULL,
  `ContactType` BIT(3) NOT NULL COMMENT 'Contact Type: 0=Individual, 1=Corporate,   2=Family, 3=Branch, 4=Department, 5=Group, 6=Fund/GIC/Bank company',
  `DisplayName` VARCHAR(80) NOT NULL,
  `SearchName` VARCHAR(80) NOT NULL,
  `Prefix` VARCHAR(15) NULL DEFAULT NULL,
  `LastName` VARCHAR(50) NULL,
  `Initials` VARCHAR(10) NULL DEFAULT NULL,
  `FirstName` VARCHAR(40) NULL DEFAULT NULL,
  `Suffix` VARCHAR(10) NULL DEFAULT NULL,
  `OrganizationName` VARCHAR(50) NULL DEFAULT NULL,
  `InCareOf` VARCHAR(80) NULL COMMENT 'If mail is to be sent with the line \"In care of  [X]\"',
  `Birthdate` DATETIME NULL DEFAULT NULL,
  `Deceased` DATETIME NULL,
  `SocialSecurityNumber` VARCHAR(20) NULL DEFAULT NULL,
  `Gender` BIT(1) NULL DEFAULT 0 COMMENT '0=Male,1=Female',
  `CulturePreference` VARCHAR(10) NULL DEFAULT 'EN-CA' COMMENT 'Global Culture variable, e.g. EN-CA or FR-CA or other.',
  `LastMeeting` DATETIME NULL DEFAULT NULL,
  `Hobbies` VARCHAR(100) NULL,
  `Inactive` TINYINT(1) NOT NULL DEFAULT False,
  `Created` DATETIME NOT NULL,
  `LastModified` DATETIME NOT NULL,
  PRIMARY KEY (`ContactId`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COMMENT = 'Stores contact and optionally personal information for other' /* comment truncated */ /* entities. */;

-- -----------------------------------------------------
-- Table `CCBPlus`.`Branches`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `CCBPlus`.`Branches` (
  `BranchID` INT NOT NULL AUTO_INCREMENT,
  `Name` VARCHAR(50) NOT NULL COMMENT 'Unique name of this branch.',
  `Code` VARCHAR(4) NOT NULL COMMENT 'Internal code for the branch number.',
  `BranchContactId` INT NULL COMMENT 'Provides the address and contact information for  the branch.',
  `BranchManagerID` INT NULL COMMENT 'ID of the agent that manages this branch.',
  `PartnerDirectOfficerID` INT NULL COMMENT 'ID of the partner that is responsible for  this branch.',
  `HeadOffice` TINYINT(1) NOT NULL DEFAULT False COMMENT 'True if this branch is the head office.',
  `VirtualBranch` TINYINT(1) NOT NULL DEFAULT False COMMENT 'Indicates that this branch  is used only for organizational purposes and is not a real branch.',
  `Inactive` TINYINT(1) NOT NULL DEFAULT False COMMENT 'True if this branch is no longer in use.',
  PRIMARY KEY (`BranchID`),
  CONSTRAINT `fk_Branch_ContactInfo`
    FOREIGN KEY (`BranchContactId`)
    REFERENCES `CCBPlus`.`Contacts` (`ContactId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Branch_Manager`
    FOREIGN KEY (`BranchManagerID`)
    REFERENCES `CCBPlus`.`Agents` (`AgentID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Branch_PartnerDirectOfficer`
    FOREIGN KEY (`PartnerDirectOfficerID`)
    REFERENCES `CCBPlus`.`Agents` (`AgentID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'Can represent a physical branch office, head office or a vir' /* comment truncated */ /*tual branch for organizational purposes.*/;
...

当脚本由 MySQL Workbench 执行时,一切都运行正常,但我最终得到一个表,其大小写正确:'Contacts',其他所有表都只有小写:'branches'。

我有 lower_case_table_names = 2。

我正在运行 MySQL Workbench 版本 6.0.9.11421 build 1170 和 MySQL 5.1.72 Community 版本。

任何帮助或建议将不胜感激。

谢谢,尼尔

【问题讨论】:

    标签: mysql mysql-workbench


    【解决方案1】:

    在向 MySQL 开发人员报告此错误后,他们建议我将小写表名设置为零:

    lower_case_table_names = 0
    

    这解决了在 Windows 7 开发平台上运行时的问题。顺便说一句,手动重命名表完全搞砸了我的 MySQL 工作台模型和我的实体框架模型。我不得不将实体框架模型与数据库重新同步,并再次手动将数据存储表与我的实体匹配,然后手动删除创建的额外表和连接。

    【讨论】:

      【解决方案2】:
      CREATE TABLE IF NOT EXISTS `CCBPlus`.`Branches` (
      .....
      REFERENCES `CCBPlus`.`Agents` (`AgentID`) <--- the table `Agents`
                                                 --not created before creating this table.
      .....
      

      【讨论】:

      • 出于某种原因,使用正向工程在 mySQL Workbench 中执行此操作似乎工作正常 - 它创建了所有表并且不会抱怨丢失的表。唯一的问题是所有的表都是用小写的名字创建的,除了第一个。甚至 Branches 表也最终成为了分支,并且它是在 Contacts 表之后创建的第一个表。
      • 我能够手动重命名表以使用 Camel Case,并且模型现在可以正确地与它们同步。仍然不知道为什么 mySQL 工作台强制其余表为小写。
      • @Arkitec 您能否在bugs.mysql.com 创建错误报告并将您的模型附在此处,以便我们检查那里有什么问题?
      • 嗨,迈克,我已按照您的建议进行操作,并将所有内容加载到错误报告中。感谢您为我指明正确的方向。
      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2010-11-24
      • 2011-03-24
      • 2017-11-08
      • 1970-01-01
      • 2011-12-02
      • 2010-10-30
      相关资源
      最近更新 更多