【问题标题】:Is there any way to make a UNIQUE index case insensitive in Mysql 5.1.x ?有没有办法在 Mysql 5.1.x 中使 UNIQUE 索引不区分大小写?
【发布时间】:2011-07-31 08:10:33
【问题描述】:

如果是这样 - 此表中必须更改什么?

CREATE TABLE  contestants 
( 
  idContestants  int(10) unsigned NOT NULL AUTO_INCREMENT,
  idEvent        int(10) unsigned NOT NULL,
  ContestantName  varchar(50) DEFAULT NULL,
  PRIMARY KEY (idContestants),
  UNIQUE KEY Index_UniqueName (idEvent,ContestantName),
)
ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

【问题讨论】:

  • “大小写本能”是什么意思?
  • 你的意思是不区分大小写吗?

标签: mysql unique-index


【解决方案1】:

如果你的意思是区分大小写,那么:

ALTER TABLE `contestants` CHANGE `ContestantName` `ContestantName` VARCHAR( 50 )
CHARACTER SET latin1 COLLATE latin1_bin NULL DEFAULT NULL 

如果你的意思是不区分大小写,那么:

ALTER TABLE `contestants` CHANGE `ContestantName` `ContestantName` VARCHAR( 50 )
CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL 

对于表级做(不区分大小写):

ALTER TABLE `contestants` DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci

请注意,表级别仅影响新列。

对于数据库级别做(不区分大小写):

ALTER DATABASE `database_name` CHARACTER SET latin1 COLLATE latin1_general_ci

请注意,数据库级别仅影响新表。

【讨论】:

  • 请务必注意,这是一个 COLUMN 级别的排序规则,最初我读得太快了,并认为这是一个不适合我的 TABLE 级别的排序规则。
  • @ScottJungwirth 我添加了有关在表和数据库级别更改它的信息。
【解决方案2】:

是的,对涉及的列使用不区分大小写的排序规则。

MySQL Manual :: Column Character Set and Collation

【讨论】:

    【解决方案3】:

    这在 Mysql 5.5 中对我有用

    ALTER TABLE `contestants` MODIFY
    `ContestantName` VARCHAR(50) 
    CHARACTER SET latin1
    COLLATE latin1_bin;
    

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 2023-03-21
      • 2017-01-20
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      相关资源
      最近更新 更多