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