mysql中varbinary、binary、char、varchar异同

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

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

 

 

存储和取出时对尾部空格的处理

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

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

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

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

 

 

大小比较时

  char与varchar的字符比较中,是忽略大小写与最后的空格的,如:

  mysql> select 'a'='a ' , 'a'='A' , 'a'='A ';

  +----------+---------+----------+

  | 'a'='a ' | 'a'='A' | 'a'='A ' |

  +----------+---------+----------+

  |        1 |       1 |        1 |

  +----------+---------+----------+

  1 row in set (0.00 sec)

 

   而binary及varbinary的字节比较中,所有的信息都不会被忽略,如:

  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.08 sec)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,varbinarybinary都是二进制数据类型,用于存储二进制数据。它们的主要区别在于它们的长度限制不同。 varbinary是一种可变长度的二进制数据类型,可以存储长度不超过65535字节的二进制数据。这意味着,它可以存储任意长度的二进制数据,而不需要预先指定长度。 而binary则是一种固定长度的二进制数据类型,必须指定长度。例如,binary(10)表示该列只能存储长度为10的二进制数据。 在Java,解析varbinarybinary数据类型的方法很相似。可以使用Java的JDBC API的ResultSet对象来访问数据库varbinarybinary数据类型。 例如,以下是使用JDBC API从数据库读取varbinary数据类型的代码示例: ``` PreparedStatement ps = conn.prepareStatement("SELECT my_varbinary_column FROM my_table WHERE id=?"); ps.setInt(1, 123); ResultSet rs = ps.executeQuery(); if (rs.next()) { byte[] varbinaryData = rs.getBytes("my_varbinary_column"); // 处理varbinaryData } ``` 类似地,以下是读取binary数据类型的代码示例: ``` PreparedStatement ps = conn.prepareStatement("SELECT my_binary_column FROM my_table WHERE id=?"); ps.setInt(1, 123); ResultSet rs = ps.executeQuery(); if (rs.next()) { byte[] binaryData = rs.getBytes("my_binary_column"); // 处理binaryData } ``` 需要注意的是,varbinarybinary数据类型存储的是二进制数据,因此在处理数据时需要特别小心。在处理二进制数据时,建议使用Java的ByteArrayInputStream和ByteArrayOutputStream等工具类,以避免对数据的意外修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值