programing

MariaDB는 열을 고유하게 만들지 않습니다.

coolbiz 2022. 10. 14. 22:05
반응형

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

반응형