Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql将位转换为字符不起作用_Mysql - Fatal编程技术网

mysql将位转换为字符不起作用

mysql将位转换为字符不起作用,mysql,Mysql,我试图将一个查询的结果作为另一个查询的参数输入,除了这个数据类型为bit的字段外,其他所有的查询都正常工作。因此,我尝试使用convert()和cast()转换字段的值,但它似乎无法返回一个小矩形的wierd符号,该符号有三个0和一个1。那么,有谁能告诉我为什么会发生这种情况,以及如何解决它,这是我的疑问 select CONVERT(isMale , char(5)) from person; 问题是,当我不使用convert时,它给了我正确的答案,但是因为我把这个结果作为一个参数给了另一个

我试图将一个查询的结果作为另一个查询的参数输入,除了这个数据类型为bit的字段外,其他所有的查询都正常工作。因此,我尝试使用convert()和cast()转换字段的值,但它似乎无法返回一个小矩形的wierd符号,该符号有三个0和一个1。那么,有谁能告诉我为什么会发生这种情况,以及如何解决它,这是我的疑问

select CONVERT(isMale , char(5)) from person;

问题是,当我不使用convert时,它给了我正确的答案,但是因为我把这个结果作为一个参数给了另一个查询,这就导致了问题

我想你应该使用CAST

 select CAST(isMale as CHAR) from person;

您可以像这样使用BIN函数:

SELECT  BIN(isMale +0) from person;
样本

MariaDB [yourschema]> SELECT  BIN(b'1001' +0) ;
+-----------------+
| BIN(b'1001' +0) |
+-----------------+
| 1001            |
+-----------------+
1 row in set (0.00 sec)

MariaDB [yourschema]>
以下是MariaDB手册中的一些内容:

说明

在不同的基数之间转换数字。返回一个 数字N的字符串表示形式,从基数转换为基数 从一个基地到另一个基地

如果任何参数为NULL,或者如果第二个或第三个参数为NULL,则返回NULL 参数不在允许的范围内

参数N被解释为整数,但可以指定为 整数或字符串。最小基数为2,最大基数为 36如果to_基是负数,则N被视为有符号数。否则,N将被视为无符号。CONV()适用于64位 精确性

此函数的一些快捷方式也可用:BIN()、OCT(), HEX(),UNHEX()。此外,MariaDB允许二进制文字值和 十六进制文字值

BIN是CONV(value,from,to)的缩写形式,您可以在其中从一个基转换到另一个基

所以二进制1001=9作为int

在这里,我以十进制(14)表示值,并将其从基数10转换为基数2

MariaDB [yourschema]> SELECT CONV(14,10  ,2);
+-----------------+
| CONV(14,10  ,2) |
+-----------------+
| 1110            |
+-----------------+
1 row in set (0.00 sec)
所以,如果你想让0在左边,你可以像这样加一个值

MariaDB [yourschema]> SELECT CONV(8192 + 14,10  ,2);
+------------------------+
| CONV(8192 + 14,10  ,2) |
+------------------------+
| 10000000001110         |
+------------------------+
1 row in set (0.00 sec)
然后你可以从右边得到n个字符:

MariaDB [yourschema]> SELECT RIGHT(CONV(8192 + 14,10  ,2),8);
+---------------------------------+
| RIGHT(CONV(8192 + 14,10  ,2),8) |
+---------------------------------+
| 00001110                        |
+---------------------------------+
1 row in set (0.40 sec)

MariaDB [yourschema]>

看到@Bernd Buffen的回答,我试着使用+0转换,结果很有效,尽管我不知道为什么

select CONVERT(isMale +0, char(5)) from person;

正如我在问题中提到的,CAST()和CONVERT()都不是working@RobelAlemu-我已经添加了一些信息-希望它能帮助
正确(CONCAT('00000000',…),8)
是一种稍微不那么麻烦的获取前导零的方法。当我阅读MySQL文档时,他们过去把一个比特当作一个tinyint,但在5.0.3之后,他们改变了这一点,这是这个bug发生的主要原因,我建议每个人在可能的时候都使用tinyint。他们希望字段中的任何比特都是0或1。尝试两种示例-选择CONVERT(b'1'+0,char(5))和选择CONVERT(b'11'+0,char(5))。第二个给你3什么是十进制正确的,但是他们想要一个像11这样的二进制表示。