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个字符的不填补空格,查询时,尾部的空格不会被丢弃掉
网友评论