嗨,我正在使用hibernate和Mysql。 我有一个名为'active'的布尔属性的类。
生成的数据库表具有BIT数据类型。 到现在为止还挺好。
我想查询这个值,但我不知道该怎么做。
我试过了
不起作用,以下都不起作用
我在参考手册和Stackoveflow中都没有找到任何内容。
任何提示?
提前致谢!
根据这个页面,对于5.0.3之前的版本,BIT是TINYINT(1)的同义词。
你试过这些吗?
此博客条目建议完全避免使用BIT数据类型。
第一个和第三个条目是coorect而第二个不起作用,至少在我的Mysql安装下。 不管怎么说,还是要谢谢你。
@Andomar不同意避免BIT数据类型。 缺点是与旧版本的互操作性,假设您不需要它,BIT实际上更紧凑地存储数据,从而节省存储空间。
@Pacerier我没看到BIT如何节省存储空间。 TINYINT(1)UNSIGNED 1字节和BIT(1)1字节。 请参阅dev.mysql.com/doc/refman/8.0/en/storage-requirements.html(与5.7相同)
实际上MySQL有内置的位文字:
您是否尝试将其转换为Integer进行比较
我大部分时间都使用MS SQL,请原谅我,如果这不起作用,因为我无法测试它。
要指定位值,可以使用b'value'表示法。
真正。 我找不到用户手册。
@Luixv - dev.mysql.com/doc/refman/5.5/en/bit-type.html
@Alvaro:这个问题已经快四年了!
@Luixv - 好的,dev.mysql.com/doc/refman/5.0/en/bit-type.html然后;-)
那么,对于比较和更新,0和1适用于我:
这是一个类型为bit(1)的字段,一行,该字段当前为false:
mysql> select isfeatured from nodes where isfeatured = 1;
Empty set (0.00 sec)
mysql> select isfeatured from nodes where isfeatured = 0;
+------------+
| isfeatured |
+------------+
| |
+------------+
1 row in set (0.00 sec)
在isfeatured中更新0到1更改,类型为bit(1)...
mysql> update nodes set isfeatured=1 where isfeatured = 0;
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
一行改变了......再试一次:
mysql> update nodes set isfeatured=1 where isfeatured = 0;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
没有按预期更改行。
与以前相同的选择查询:
mysql> select isfeatured from nodes where isfeatured = 1;
+------------+
| isfeatured |
+------------+
| |
+------------+
1 row in set (0.00 sec)
mysql> select isfeatured from nodes where isfeatured = 0;
Empty set (0.01 sec)
看,它有效。
我正在使用:
mysql Ver 14.14 Distrib 5.5.31,对于使用readline 6.2的debian-linux-gnu(x86_64)
和
/ usr / sbin / mysqld Ver 5.5.31-0 + wheezy1 for debian-linux-gnu on x86_64((Debian))