mysql - MariaDB 是否可以在没有键长度的情况下对 BLOB 列进行索引?
问题描述
当我在两个 MariaDB 实例上执行相同的语句时,一个出错,另一个没有。
我执行的语句是:
CREATE TABLE `session_tokens` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) unsigned NOT NULL,
`token` blob NOT NULL,
`inserted_at` datetime(6) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `session_tokens_token_index` (`token`) USING HASH,
KEY `session_tokens_user_id_index` (`user_id`),
CONSTRAINT `session_tokens_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`login_name` varchar(255) NOT NULL,
`hashed_password` varchar(255) NOT NULL,
`inserted_at` datetime(6) NOT NULL,
`updated_at` datetime(6) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_login_name_index` (`login_name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
显示的错误信息:
ERROR 1170 (42000): BLOB/TEXT column 'token' used in key specification without a key length
两个实例的版本相同。
mariadb Ver 15.1 Distrib 10.3.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
出现错误的实例的操作系统是在 Google Cloud Platform 上运行的 Ubuntu 20.04.2 LTS。另一个实例的操作系统是在本地 Docker 上运行的 Debian GNU/Linux 10 (buster)。
根据已经进行的讨论,发生错误似乎是正确的。
如果您对为什么会出现这种差异有任何线索,请告诉我。
解决方案
推荐阅读
- python - 如何在小于N的数组中找到最大和
- java - 获取无法编译内联过滤器:
- javascript - 如何使用按钮单击列出存储在 JS 数组中的所有值?
- javascript - 编剧错误:UnhandledPromiseRejectionWarning:TimeoutError:等待firstPage代理失败:超时30000ms
- java - Spring Boot Cache 中的咖啡因缓存:获取所有缓存的键
- apache-nifi - Nifi UpdateRecord 处理器问题
- sql - 我的子查询未正确提供准确的小计
- reactjs - ReactJs 中 API 响应的表格渲染问题
- c++ - 如何在Visual C++中从json文件中读取节点数据
- spring-boot - 使用 apache camel 和 groovy 非堆内存的 Spring-boot 不断增加