mysql - 不从 MySql 存储过程中检索正确的十六进制值

标签 mysql stored-procedures hex

我正在尝试使用以下过程向 sp1 表添加值。 但它不会检索正确的十六进制值。

create table sp1(
id varchar(10),
txt varchar(10)
);


create procedure sp_ins1(p varchar(10))
BEGIN
set @x = char_length(p);
set @y = binary(p);
insert into sp1(id,txt)
    values(@x,@y);
END;

通过调用以下函数将值添加到表中。

call sp_ins1(4);
call sp_ins1(13);
call sp_ins1(45);

select * from sp1\g

这就是结果

+------+----------+
| id   | txt      |
+------+----------+
| 1    | 34       |
| 2    | 3133     |
| 2    | 3435     |
| 4    | 36373537 |
| 1    | 31       |
+------+----------+

这是什么原因?

最佳答案

不明白问题所在。另外sp_ins7 != sp_ins1

尝试:

mysql> SELECT
    ->   CHAR_LENGTH('4') `id`,
    ->   BINARY('4') `txt_BIN`,
    ->   HEX('4') `txt_HEX`
    -> UNION
    -> SELECT
    ->   CHAR_LENGTH('13') `id`,
    ->   BINARY('13') `txt_BIN`,
    ->   HEX('13') `txt_HEX`
    -> UNION
    -> SELECT
    ->   CHAR_LENGTH('45') `id`,
    ->   BINARY('45') `txt_BIN`,
    ->   HEX('45') `txt_HEX`
    -> UNION
    -> SELECT
    ->   CHAR_LENGTH('6757') `id`,
    ->   BINARY('6757') `txt_BIN`,
    ->   HEX('6757') `txt_HEX`
    -> UNION
    -> SELECT
    ->   CHAR_LENGTH('1') `id`,
    ->   BINARY('1') `txt_BIN`,
    ->   HEX('1') `txt_HEX`;
+----+---------+----------+
| id | txt_BIN | txt_HEX  |
+----+---------+----------+
|  1 | 4       | 34       |
|  2 | 13      | 3133     |
|  2 | 45      | 3435     |
|  4 | 6757    | 36373537 |
|  1 | 1       | 31       |
+----+---------+----------+
5 rows in set (0.00 sec)

参见12.5 String Functions::HEX .

关于mysql - 不从 MySql 存储过程中检索正确的十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45004907/

相关文章:

mysql - SQL:在一个表中返回多对多

MySQL 错误代码 : 1064 Stored Procedure Syntax Error near END END

perl - 如何在 Perl 中将十六进制字符串转换为数字?

c++ - 字符数组到十六进制字符串 C++

mysql - 在 MySQL 中存储用户的 "favorites"的最佳方式

php - mysqli_connect从包含的文件不起作用

sql - 如何有效的版本存储程序?

mysql - sql 存储过程 Quotes()

c++ - 1 字节整数不转换 i/o 格式

php - 如何从 mysql select 中分离结果