MariaDB는 열을 고유하게 만들지 않습니다.
최근 기존 MariaDB 테이블을 복제했습니다(Amazon RDS에서 사용).2개의 테이블은 데이터를 포함하여 기본적으로 동일하지만, 새로운 버전에는 고유한 제약이 모두 없습니다(프라이머리 키는 정상적으로 유지됨).유니크를 다시 추가하려고 했을 때 오류가 발생하였습니다.
BLOB/TEXT column 'url' used in key specification without a key length
MySQL/MariaDB는 텍스트 열을 고유하게 만들지 못한다고 주장하는 사람도 있습니다.그러나 로컬 머신에 있는 원래 MariaDB 데이터베이스에는 고유한 키를 가진 텍스트 열이 많이 있으므로 그럴 수 없습니다.어쨌든 (varchar로 전환) 솔루션을 사용해 보았습니다만, MariaDB도 데이터에 문자가 너무 많기 때문에 그렇게 할 수 없었습니다.좋은 생각 있어요?대단히 고맙습니다.
MariaDB 10.4는 인덱스를 자동으로 해시 인덱스로 변환하므로 TEXT 열의 UNIQE KEY를 지원합니다.
mysql> create table t (id serial primary key, t text, unique key(t));
Query OK, 0 rows affected (0.01 sec)
mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`t` text DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `t` (`t`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=latin1
안타깝게도 Amazon RDS for MariaDB는 아직 MariaDB 10.4(2020-03-19년 기준)를 지원하지 않습니다.
Amazon RDS는 MariaDB Server 버전 10.0, 10.1, 10.2 및 10.3을 지원합니다. 즉, 현재 사용하고 있는 코드, 애플리케이션 및 도구를 Amazon RDS에서 사용할 수 있습니다.
HASH 인덱스 기능은 MariaDB 10.3 이전 버전에서는 지원되지 않습니다.
mysql> create table t (id serial primary key, t text, unique key(t));
ERROR 1170 (42000): BLOB/TEXT column 't' used in key specification without a key length
텍스트 컬럼의 프리픽스에 원하는 키를 작성할 수 있습니다.
mysql> create table t (id serial primary key, t text, unique key(t(1000)));
Query OK, 0 rows affected (0.01 sec)
mysql> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`t` text DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `t` (`t`(1000))
) ENGINE=InnoDB DEFAULT CHARSET=latin1
즉, 고유 키는 처음 1000자의 고유성을 적용합니다.처음 1000자는 동일하지만 1001자 이후가 다른 문자열로 두 행을 저장할 수 없습니다.
언급URL : https://stackoverflow.com/questions/60765492/mariadb-wont-let-me-make-column-unique
'programing' 카테고리의 다른 글
개체 배열에서 값을 검색 및 업데이트하려면 어떻게 해야 합니까? (0) | 2022.10.14 |
---|---|
Nuxt.js를 사용하여 vuex 상태로 로컬 스토리지 데이터를 가져오는 방법 (0) | 2022.10.14 |
바이트를 이진 문자열 표현으로 변환하는 방법 (0) | 2022.10.14 |
mysql에서 임시 테이블을 만드는 동안 문제가 발생했습니다. (0) | 2022.10.14 |
연산자 우선 순위(비트 '&'가 '=='보다 낮음) (0) | 2022.10.14 |