mysql二进制数据存储处理binary和varbinary使用

2020-04-02  本文已影响0人  哆啦在这A梦在哪

mysql中varbinary、binary、char、varchar异同

类型比较

@@binary 与 varbinary 类型、char与varchar类型是相似的,只是他们存储的是二进制数据,也就是说他们是包含字节流而不是字符流,他们有二进制字符的集合和顺序,他们的对比,排序是基于字节的数值进行的

长度比较

@@binary与varbinary的最大长度、char与varchar是一样的,只不过他们是定义字节长度,而char和varchar对应的是字符长度。

数据存储

binary(N)存储二进制字符串,插入进,少于N个字节的会自动在尾部加0x00,取出时,所有的字节都保留,返回定义长度的字节长度,在比较的时候,所有的字节都是有效的,并且0x00<space (space对应的是0x20)

varbinary在插入不会去填补0x00字节,查询的时候也不会丢弃任何字节,在比较的时候,所有的字节都是有效的,并且0x00<space (space对应的是0x20)

使用差异

这里在使用的时候,就会有明显的差距。相同存储一段二进制数组([]byte)

[240 41 103 62 114 118 78 87 233 129 102 85 14 66 42 209 65 136 122 5 90 118 6 168 6 250 77 45 196 126 181 132]

binary类型取出:

[240 41 103 62 114 118 78 87 233 129 102 85 14 66 42 209 65 136 122 5 90 118 6 168 6 250 77 45 196 126 181 
132 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

注意,注意,注意 由于会自动末尾填充0x00,所以这里会多18位的0.

varbinary类型取出:

[240 41 103 62 114 118 78 87 233 129 102 85 14 66 42 209 65 136 122 5 90 118 6 168 6 250 77 45 196 126 181 132] 

原来一样,这里使用的的时候,类型需要酌情处理
存储和取出时对尾部空格的处理

char(N)用来存储非二进制字符串,插入时,对于少于N个字符的会自动在尾部加空格,查询时,尾部的空格就会被丢弃掉

vachar(N) 用来存储非二进制字符串,插入时,对于少于N个字符的不填补空格,查询时,尾部的空格不会被丢弃掉

上一篇下一篇

猜你喜欢

热点阅读