5

这是我的 mysql 表架构,我使用的是 mysql 5

--
-- Table structure for table `DATA_USER_ROLE`
--

DROP TABLE IF EXISTS `DATA_USER_ROLE`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `DATA_USER_ROLE` (
  `ID` int(11) NOT NULL,
  `NAME` varchar(128) NOT NULL,
  `VAL_ID` int(11) NOT NULL,
  `CREATION_TIME` datetime NOT NULL,
  `ROLE_TYPE` int(11) NOT NULL,
  `STORAGE_TYPE` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `BV_AC_ROLE_KEY_IDX` (`NAME`,`VAL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

需要 UNIQUE KEY 大小写敏感,

它应该允许输入像('a',0) & ('A', 0) 这样的值

尝试将排序规则更改为 latin_1 和 latin_generic_ci

4

5 回答 5

3

BINARY最简单的就是在 DDL 语句上添加,

`NAME` varchar(128) BINARY NOT NULL
于 2013-04-01T05:22:07.467 回答
1

可以在整个表格上添加不区分大小写COLLATE,即表格中的每个文本列,例如

CREATE TABLE `DATA_USER_ROLE` (
  `ID` int(11) NOT NULL,
  `NAME` varchar(128) NOT NULL,
  `VAL_ID` int(11) NOT NULL,
  `CREATION_TIME` datetime NOT NULL,
  `ROLE_TYPE` int(11) NOT NULL,
  `STORAGE_TYPE` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `BV_AC_ROLE_KEY_IDX` (`NAME`,`VAL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

在这种情况下,_ci末尾的COLLATE代表case insensitive

这遵循 Monolune 对 CHARSET 和 COLLATE 的建议,来自https://www.monolune.com/mysql-utf8-charsets-and-collat ​​ions-explained/和
https://www.monolune.com/what-is-the-utf8mb4_0900_ai_ci-整理/

这些是自 MySQL 8.0.1 以来的默认值。

于 2021-04-29T17:48:52.550 回答
0

如果您需要区分大小写:

ALTER TABLE `DATA_USER_ROLE` CHANGE `NAME` `NAME` VARCHAR( 128 )
CHARACTER SET latin1 COLLATE latin1_bin NULL DEFAULT NULL 

如果您需要不区分大小写:

ALTER TABLE `DATA_USER_ROLE` CHANGE `NAME` `NAME` VARCHAR( 128 )
CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL 
于 2013-04-01T05:34:25.913 回答
0

你可以这样做..

create table testTable (col_name varchar(100) character set utf8 
collate utf8_bin not null ) Engine=innodb default charset=utf8 
于 2016-09-28T08:48:33.227 回答
-1

默认情况下,只需为您的数据库使用 utf8_general_ci (不区分大小写)字符集或仅用于一行,如果您需要

于 2015-10-16T08:09:13.060 回答