BINARY和VARBINARY類型
BINARY和VARBIANRY類型同CHAR和VARCHAR類型相似,除了BIANARY和VARBINARY類型只包含二進制字符串,即它們只包含byte串而非字符串,它們沒有字符集的概念,排序和比較操作都是基於字節的數字值。
BINARY和VARBIANRY類型允許的最大長度同CHAR和VARCHAR一樣,除了BINARY和VARBIANRY類型以字節為單位計算長度的,而不是以字符為單位計算長度。
BINARY采用左對齊方式存儲,即小於指定長度時,會在右邊填充0值,例如:BINARY(3)列,插入‘a\0'時,會變成’a\0\0'值存入。VARBINARY則不用在右邊填充0。當在比較的情況下,填充的部分會被忽略掉或者被移除。
BIT數據類型
BIT數據類型用於存儲bit值,能夠存儲比特長度范圍為1~64。
采用 b'value'標記方式指定bit值,其中value是0或者1的序列,例如:b'111'代表7,b'10000000'代表128。
如果設置的0,1串的長度小於BIT(M)的M,那么在左面填充0,例如,將b'101'賦給BIT(6),那么會存儲b'000101'。
mysql> CREATE TABLE t (b BIT(8));
mysql> INSERT INTO t SET b = b'11111111';
mysql> INSERT INTO t SET b = b'1010';
mysql> INSERT INTO t SET b = b'0101';
直接返回bit是不可讀的,如果要變為可讀的,可采用"+0"的方式或者用BIN()之類的轉換函數, 轉換后的值不顯示高位0。
mysql> SELECT b+0, BIN(b+0), OCT(b+0), HEX(b+0) FROM t;
b+0: 255 10 5
BIN(b+0): 1111111 1010 101
OCT(b+0): 377 12 5
HEX(b+0): FF A 5
將bit值賦值給數字或者變量,可使用CAST()函數或者"+0"方式:
mysql> SET @v1 = 0b1000001;
mysql> SET @v2 = CAST(0b1000001 AS UNSIGNED), @v3 = 0b1000001+0;
mysql> SELECT @v1, @v2, @v3;
@v1: A
@v2: 65
@v3: 65