我需要一个16字节的二进制数据列是唯一的。为什么在MySQL和MariaDB中,当BLOB(16)支持唯一的VARCHAR时,它们是不是唯一的?这是支持的,但不是一个固定长度的字节集合似乎是坚果。此外,通过以base64编码的字符串存储二进制值来浪费空间是不可接受的。因此,比转换为/创建组合唯一索引的两个BIGINT更好的选择(如果它很重要,这个16字节的二进制不会被用作主键)? (另外,如果我确实使用了两个BIGINT,那么INSERT IGNORE在复合唯一索引上的重复插入会如同非复合索引那样静静地失败吗?这对于我来说非常重要,因为我需要重复的16字节插入的情况下尝试无提示失败加上后续LAST_INSERT_ID()返回0)。MySQL/MariaDB固定长度的唯一BLOB
0
A
回答
2
您可以在BLOB列上创建UNIQUE索引,只需指定索引的最大长度(这也意味着,它将只在那些许多角色中才是唯一的)。
但是,请考虑使用VARBINARY,它允许您修复长度,并且意味着您不能插入可能意外破坏唯一约束的较长字段。见https://dev.mysql.com/doc/refman/5.6/en/binary-varbinary.html
例如,在23年6月5日测试:
mysql [localhost] {msandbox} (test) > create table t1 (a BLOB(16), UNIQUE INDEX `a`(`a`(16)));
Query OK, 0 rows affected (0.01 sec)
mysql [localhost] {msandbox} (test) > insert into t1 values('aaa');
Query OK, 1 row affected (0.01 sec)
mysql [localhost] {msandbox} (test) > insert into t1 values('aaa');
ERROR 1062 (23000): Duplicate entry 'aaa' for key 'a'
mysql [localhost] {msandbox} (test) >
mysql [localhost] {msandbox} (test) > create table t2(a VARBINARY(16), UNIQUE INDEX `a`(`a`));
Query OK, 0 rows affected (0.02 sec)
+0
这工作;谢谢! –
1
BINARY(16)
是你的意思有。
相关问题
- 1. 固定长度
- 2. 固定长度的唯一字母数字字符串
- 3. 从另一个太长的唯一数值创建一个固定长度的唯一字符串
- 4. 固定长度的NSString
- 5. 固定长度的MenuItems
- 6. 指定长度唯一ID生成
- 7. XSL填充固定长度
- 8. 固定长度哈希
- 9. 如何使固定长度
- 10. vis.js固定长度边缘
- 11. 固定长度BitArrays阵列
- 12. 填充到固定长度
- 13. 固定长度菜单
- 14. 找到可能的唯一固定长度排列数的最有效方法?
- 15. 如何在Java中生成固定长度的唯一标识符?
- 16. 的Python的strftime%A固定长度
- 17. java中的固定长度的StringBuffer
- 18. 连续,固定长度的可变长度序列批次
- 19. 固定长度文件中的多个长度=“无界”
- 20. 使用不同固定长度的TextFieldParser
- 21. 选择固定长度的查询
- 22. 固定长度的HTML框架
- 23. 拆分固定长度的字符串
- 24. 固定长度的大整数
- 25. 来自Sqoop的固定长度文件
- 26. 生成固定长度的列表
- 27. 固定长度的数量以及
- 28. 插入固定长度的输入
- 29. MSChart固定长度的X轴
- 30. C#中固定长度的字符串
你试过二进制或varbinary吗? – Tim3880
工作台不让我将BINARY设置为Unique。 –