gpt4 book ai didi

mysql/mariadb - 创建表列索引不工作

转载 作者:可可西里 更新时间:2023-11-01 06:45:32 24 4
gpt4 key购买 nike

所以我正在尝试按如下方式创建我的表:

CREATE TABLE company
(
id INT UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT,
name TEXT UNIQUE NOT NULL,

INDEX(name(20))
);

它给我这个错误:

ERROR 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length

我不确定为什么它不起作用,因为我正在按照此处的指南操作:https://dev.mysql.com/doc/refman/5.5/en/column-indexes.html

最佳答案

您关注的是错误的行。

name TEXT UNIQUE NOT NULL,

BLOBTEXT 列上的索引必须是前缀索引,因此,不可能对 施加 UNIQUE 约束TEXT 列。您也不能将这样的列作为主键或外键约束的一部分。

两种常见的解决方案:

  1. 不要使用 TEXT 列,使用 VARCHAR

  2. 如果您确实需要一个长列是唯一的,请创建第二个 CHAR 类型的列,COLLATE ascii_bin,为其添加唯一约束,然后它的大小适合所选加密哈希 (md5, sha) 的 base64 表示。使用 BEFORE INSERTBEFORE UPDATE 触发器强制此列包含长列的哈希值,从而间接强制执行唯一性。数据类型 CHAR 因为所有散列的长度都相同,而 ascii_bin 因为这是最适合 base64 的排序规则。为什么是 base64?这是存储空间换取可读性的权衡,使用24个字符存储一个md5 hash,在存储空间上大约介于二进制(16个字符为md5,高效)和十六进制(32个字符为md5,低效)编码之间。

关于mysql/mariadb - 创建表列索引不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45625421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com