我需要一個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。 –