MySQL max key length is 3072 bytes 伤心

55 天前
 nnegier

报的错:
ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

但我确实需要大一点的 key ,因为这里有个 key 是文件路径 filepath(varchar),怕有些路径逆天的长,所以才希望越大越好

unique index xr_top_index(filepath,account)

但是系统不允许,感觉这样的话只好作罢?

3048 次点击
所在节点    MySQL
24 条回复
guochao
54 天前
存路径这个做法本身有点怪……我可能会选择文件的其他特征来做这个事情……

不清楚场景,假设场景必须要存路径,考虑一下把 SOMEHASH(filepath, account), account 作为 key 呢?比如说 trigger 去 set 一下额外的列为 SHA2(CONCAT(filepath,"\\/", account), 256),把这个列作为 unique key 的一个 column 。降低碰撞概率的话,多加一种两种哈希呢?

我是写业务的菜鸡,暂时还只能想怎么实现的问题。要不然就只能业务上限制一下了
wenxueywx
54 天前
更好的做法是做好文件管理规划,程序上做约束,限制目录深度。
leaflxh
54 天前
b 站的图片都是 sha1 ,目前还没炸,当然可能是从数字 id 算出来的,提前预演跑一遍,确定没问题

不放心的话存之前读一遍,判断是否有相同的哈希值
xuyang2
54 天前
GPT 如是说:

SHA-1 (安全散列算法 1 )、SHA-256 和 SHA-512 都是加密散列函数,分别是 SHA 系列算法中的不同变种。碰撞( collision )指的是两个不同的输入值经过散列函数处理后产生相同的散列值。

- SHA-1:SHA-1 产生的散列值是 160 位( 20 字节),理论上存在 2^160 个可能的散列值。根据生日攻击的原理,大约在尝试 2^(160/2) = 2^80 个不同的输入后,就有较大概率发生一次碰撞。然而,现实中,SHA-1 的实际安全性比理论值要低,现已发现更有效的攻击方法,使得找到 SHA-1 碰撞的实际难度远低于 2^80 次尝试。因此,SHA-1 不再被认为是安全的,很多应用已经逐渐废弃了 SHA-1 ,转而使用更安全的散列函数。
- SHA-256:SHA-256 产生的散列值是 256 位( 32 字节),理论上存在 2^256 个可能的散列值。根据生日攻击原理,大约在尝试 2^(256/2) = 2^128 个不同的输入后,就有较大概率发生一次碰撞。目前没有已知的实用方法能有效地找到 SHA-256 的碰撞,因此它被认为是安全的。
- SHA-512:SHA-512 产生的散列值是 512 位( 64 字节),理论上存在 2^512 个可能的散列值。根据生日攻击原理,大约在尝试 2^(512/2) = 2^256 个不同的输入后,就有较大概率发生一次碰撞。与 SHA-256 一样,目前没有已知的实用方法能有效地找到 SHA-512 的碰撞,所以它也被认为是安全的。

需要注意的是,虽然理论上存在碰撞的可能性,但在实际中,对于 SHA-256 和 SHA-512 而言,找到碰撞所需要的计算量是极其巨大的,超出了目前技术的可行范围。因此,在实践中,它们被认为是足够安全的散列函数,广泛用于加密、数据完整性验证和数字签名等应用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1030114

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX