mysql varbinary 长度_mysql8 参考手册--BINARY和VARBINARY类型
BINARY和VARBINARY類型與CHAR和VARCHAR類似,只是它們存儲的是二進制字符串而不是非二進制字符串。也就是說,它們存儲字節字符串而不是字符串。這意味著它們具有二進制字符集和排序規則,并且比較和排序基于值中字節的數值。
對于BINARY和VARBINARY,允許的最大長度與CHAR和VARCHAR相同,只是BINARY和VARBINARY的長度是以字節而不是字符度量的。
BINARY和VARBINARY數據類型不同于CHAR BINARY和VARCHAR BINARY數據類型。對于后一種類型,BINARY屬性不會將列視為二進制字符串列。相反,它將使用列字符集(如果未指定列字符集,則使用表默認字符集)的二進制`(_bin)'排序規則,并且列本身存儲非二進制字符串,而不是二進制字節字符串。例如,如果默認字符集是utf8mb4,則CHAR(5)BINARY被視為CHAR(5)character set utf8mb4 COLLATE utf8mb4_bin。這與BINARY(5)不同,后者存儲具有二進制字符集和排序規則的5字節二進制字符串。
如果未啟用嚴格的SQL模式,并且您為BINARY或VARBINARY列分配的值 超過了列的最大長度,則該值將被截斷以適合并生成警告。對于截斷的情況,要導致發生錯誤(而不是警告)并抑制該值的插入,請使用嚴格的SQL模式。
當存儲二進制值時,它們用pad值填充到指定的長度。pad值為0x00(零字節)。值用0x00右填充以進行插入,并且不刪除用于檢索的尾隨字節。所有字節在比較中都是重要的,包括按順序和不同的操作。0x00和space的比較不同,0x00在space之前排序。
示例:對于BINARY(3)列, 在插入時'a '變為 'a \0'。 插入時'a\0'變為'a\0\0'。兩個插入的值均保持不變以進行檢索。
對于VARBINARY,不存在插入的填充,也不剝離用于檢索的字節。所有字節在比較中都是重要的,包括按順序和不同的操作。0x00和space的比較不同,0x00在space之前排序。
對于剝離尾隨字節或比較忽略它們的情況,如果一列具有要求唯一值的索引,則將僅尾隨字節數不同的值插入該列會導致重復鍵錯誤。例如,如果表包含'a',則嘗試存儲'a\0'會導致重復鍵錯誤。
如果打算使用BINARY數據類型存儲二進制數據并且要求檢索的值與存儲的值完全相同,則應仔細考慮上述填充和剝離特性 。以下示例說明了 值的0x00填充如何影響 YBINAR列值比較:
mysql> CREATE TABLE t (c BINARY(3));
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t SET c= 'a';
Query OK, 1 row affected (0.01 sec)
mysql> SELECT HEX(c), c= 'a', c = 'a\0\0' from t;
+--------+---------+-------------+
| HEX(c) | c = 'a' | c = 'a\0\0' |
+--------+---------+-------------+
| 610000 | 0 | 1 |
+--------+---------+-------------+
1 row in set (0.09 sec)
如果檢索的值必須與為存儲指定的值相同且沒有填充,則最好使用VARBINARY或使用 一種 BLOB數據類型來代替。
總結
以上是生活随笔為你收集整理的mysql varbinary 长度_mysql8 参考手册--BINARY和VARBINARY类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置管理小报100329:脚本中ftp命
- 下一篇: 数据库的应用详解三