我有一个主键为varchar(255)的表。在某些情况下,255个字符不够用。我尝试将字段更改为文本,但是出现以下错误:
BLOB/TEXT column 'message_id' used in key specification without a key length
我怎样才能解决这个问题?
编辑:我还应该指出,该表具有包含多个列的复合主键。
发生错误是因为MySQL只能索引BLOB或TEXT
列的前N个字符。所以错误主要发生时,有一个领域/列类型TEXT
或BLOB或那些属于TEXT
或BLOB
类型,如TINYBLOB
,MEDIUMBLOB
,LONGBLOB
,TINYTEXT
,MEDIUMTEXT
,和LONGTEXT
您尝试使一个主键或索引。无论长度是完整的BLOB
还是TEXT
没有长度的,MySQL都无法保证列的唯一性,因为它具有可变大小和动态大小。因此,当使用BLOB
or
TEXT
类型作为索引时,必须提供N的值,以便MySQL可以确定键的长度。但是,MySQL不支持TEXT
或上的密钥长度限制BLOB
。TEXT(88)
根本行不通。
当您尝试将表列从non-TEXT
和non- BLOB
类型(如VARCHAR
和ENUM
转换为TEXT
或BLOB
类型)转换为错误,并且该列已被定义为唯一约束或索引时,也会弹出该错误。Alter
Table SQL命令将失败。
该问题的解决方案是从索引或唯一约束中删除TEXT
或BLOB
列,或将另一个字段设置为主键。如果您不能这样做,并且想对TEXT
or
BLOB
列设置限制,请尝试使用VARCHAR
type并对其限制长度。默认情况下,VARCHAR
最大限制为255个字符,并且必须在声明后立即在括号内隐式指定其限制,即,VARCHAR(200)
将其限制为仅200个字符长。
有时,即使您没有在表中使用TEXT
或BLOB
相关类型,也可能会出现错误1170。例如,当您将VARCHAR
列指定为主键,但是错误地设置了它的长度或字符大小时,就会发生这种情况。VARCHAR
最多只能接受256个字符,因此,诸如此类的任何操作都VARCHAR(512)
将迫使MySQL自动将其转换VARCHAR(512)
为SMALLTEXT
数据类型,如果将该列用作主键或唯一或非唯一索引,则该操作随后将失败,键长度错误1170。要解决此问题,请指定小于256的数字作为VARCHAR
字段的大小。
参考:MySQL错误1170(42000):键规范中使用的BLOB /
TEXT列没有键长
问题内容: 我正在使用3DESC解密数据,但出现以下异常 我的代码: 打印上面使用的所有字节数组 问题答案: DES- EDE密码可与3个不同的子密钥一起使用,因此密钥大小应为24字节(3乘8字节)。如果您只想使用2个键(即在此模式下,第一个键==最后一个键),则只需复制键数组的前8个字节。
问题内容: 此代码给出了无效的AES密钥长度错误。我该如何纠正?(我想要128位密钥AES加密) 任何帮助表示赞赏 问题答案: 使用a 从密码派生密钥字节。您可以在此处查看详细示例。请注意,您需要指定128位密钥的密钥长度,而不是该示例中所示的256位。 您将遇到的下一个问题是您没有指定填充方案。除非您的消息是16字节(AES块大小)的倍数,否则将引发错误。如示例所示,使用PKCS5Padding
我被要求为安全类实现AES算法。在实现过程中,我找不到答案,我如何从用户那里接受像密码这样的任意长度的密钥,并将其转换为128、192或256位密钥。我该怎么办?
我使用mysql aes加密和解密如下: 我读到AES支持128 192和256。我假设默认值是128是正确的吗?因此,鉴于上述查询没有定义密钥长度,它会以默认密钥长度加密和解密吗? 如果是这样,在上面的查询中指定密钥长度会更好吗?因为例如:假设我使用默认值128加密和存储数据,但后来设置更改,256变为默认值,那么这意味着它将无法解密数据,对吗?有没有办法在上面的查询中定义密钥长度? 另外,我用
问题内容: 原因 我该怎么办? 这是我的数据库编码: 问题答案: 这仅仅是一个MySQL问题- MySQL具有不同的引擎-MyISAM,InnoDB,内存… MySQL对可用于在列上定义索引的空间量有不同的限制- MyISAM为1,000字节;对于InnoDB是767 。这些列的数据类型很重要- 例如,它是3倍,因此a上的索引将占用其中300个字节(因为100个字符* 3 = 300)。 为了在达
我使用用户提供的32字节秘密密钥使用HMAC-256对一些数据进行签名。我还希望我的应用程序使用AES-192加密数据。我应该向用户要求另一个秘密密钥(这次是16字节大小),还是有一种安全的方法从另一个32字节密钥中导出16字节的强秘密密钥?第二种方法会使应用程序配置更容易一点。有什么指导方针或提示吗?或者这种方法完全是胡说八道?