cod*_*di6 4 amazon-rds mariadb
我最近复制了一个现有的 MariaDB 表(用于 Amazon RDS)。这两个表基本上是相同的,包括数据,但我注意到新版本缺少所有唯一的约束(保持主键很好)。当我尝试添加回唯一值时,出现错误:
BLOB/TEXT column 'url' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)
其他人也遇到过这个问题,并且人们声称MySQL/MariaDB 根本不允许您使文本列唯一。但我原来的 MariaDB 数据库(在我的本地计算机上)有大量带有唯一键的文本列,所以不可能是这样。无论如何,我尝试了他们的解决方案(切换到 varchar),但 MariaDB 也不让我这样做,因为我的数据有太多字符。有任何想法吗?非常感谢。
MariaDB 10.4 支持 TEXT 列上的 UNIQUE KEY,因为它会自动将索引转换为 HASH 索引:
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
Run Code Online (Sandbox Code Playgroud)
不幸的是,根据https://aws.amazon.com/rds/mariadb/ 的说法,Amazon RDS for MariaDB 尚不支持 MariaDB 10.4(截至 2020 年 3 月 19 日):
Amazon RDS 支持 MariaDB Server 版本 10.0、10.1、10.2 和 10.3,这意味着您现在已经使用的代码、应用程序和工具可以与 Amazon RDS 一起使用。
MariaDB 10.3 或更早版本不支持 HASH 索引功能:
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
Run Code Online (Sandbox Code Playgroud)
您可以在文本列的前缀上创建唯一键:
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
Run Code Online (Sandbox Code Playgroud)
这意味着唯一键将强制前 1000 个字符的唯一性。不允许存储前 1000 个字符相同但第 1001 个字符或以后字符不同的字符串的两行。
归档时间: |
|
查看次数: |
1699 次 |
最近记录: |