Hex,unhex函数之mysql
关键字
hex函数,unhex函数 mysql sqlserver、人大金仓、KingbaseES
问题描述
mysql8 hex函数调研
语法:hex(arg);
功能:将一个字符串或数字转换为十六进制格式的字符串。
其中参数arg分为两种:字符串参数str,数字参数N。
- 对于字符串参数str,hex返回str的十六进制字符串,其中str中每个字符的每个字节的编码以两个十六进制数字表示。
- 对于数字参数N分为两种情况:N为整数时,若超出bigint最大范围,则输出7FFFFFFFFFFFFFFF,若未超出hex将N值的十六进制字符串表示将10进制数以16进制形式显示;N为小数时,会先将N四舍五入为整数再进行hex函数执行。
- 若参数是其他类型,会先转化为字符串然后按字符串进行处理。
mysql8 unhex函数调研
语法:unhex(arg);
功能:将参数中每对十六进制数字转换为该数字表示的字符。
其中参数arg分为两种:字符串参数str,数字参数N。
- 对于字符串参数str,将参数中的每对字符解释为十六进制数字,并将其为该数字所表示的字节。返回类型为binary。
- 参数字符串中的字符必须合法的十六进制数字:“0”…“9”,“A”…“F”,“a”…”f”,如果参数遇到任何非十六进制数字,则返回NULL;
- 对于数值参数N,不接受小数,负数形式参数,返回null,只允许参数为正整数,将N转为字符串处理;
- 对于其他类型参数,返回NULL
问题分析
mysql hex测试用例
函数
用例
结果
hex(str)
select hex('');
空
select hex(' ');
20
select hex(null);
null
select hex('aaa');
616161
select hex('111');
313131
select hex('1a1');
316131
select hex('*');
2A
select hex('M');
4D
select hex('M^1');
4D5E31
select hex('给');
E7BB99
select hex('2023-08-16 00:00:00');
323032332D30382D31362030303A30303A3030
select hex(to_date('2023-08-16 00:00:00','%Y-%m-%d'));
323032332D30382D31362030303A30303A3030
select hex('09:30:00');
30393A33303A3030
select hex(time('09:30:00'));
30393A33303A3030
select hex('hello');
68656C6C6F
select hex(cast('hello' as binary));
68656C6C6F
select hex(cast('10' as double));
A
select hex(10);
A
hex(N)
select hex(12);
C
select hex(12.5);
D
select hex(12.3);
C
select hex(12.8);
D
select hex(-12);
FFFFFFFFFFFFFFF4
select hex(-12.2);
FFFFFFFFFFFFFFF4
select hex(-12.5);
FFFFFFFFFFFFFFF3
select hex(123a);
报错
select hex(100000000000000000000000000);
7FFFFFFFFFFFFFFF,warning
kes unhex测试用例
函数
用例
mysql结果
unhex()
--skip-binary-as-hex
select unhex(-6161);
Null,warning
select unhex(123.123);
Null,warning
select unhex(-123.123);
Null,warning
select unhex('6161');
aa
select unhex(6161);
aa
select unhex('6161.6262');
Null,warning
select unhex('asd');
Null,warning
select unhex(346);
F
select unhex('346');
F
select unhex('');
空
select unhex(' ');
Null,warning
select unhex(null);
Null
不加—skip-binary-as-hex
select unhex(-6161);
Null,warning
select unhex(123.123);
Null,warning
select unhex(-123.123);
Null,warning
select unhex('6161');
0x6161
select unhex(6161);
0x6161
select unhex('6161.6262');
Null,warning
select unhex('asd');
Null,warning
select unhex(346);
0x0346
select unhex('346');
0x0346
select unhex('');
0x
select unhex(' ');
Null,warning
select unhex(null);
Null
select unhex(now());
Null,warning
select unhex(cast('hello' as binary));
NULL
结论
hex功能
函数定义:text hex(any str)
函数功能:将str存储在计算机中的字节以十六进制数字表示。
- 如果参数是null则返回null,若为’’则返回null;
- 支持中文传参;
- 如果参数为小数,会先将小数四舍五入成整数;
- 参数支持负数;
如果参数为其他类型,数据库会先将其转换为字符串类型再进行函数转化功能。
unhex功能
- 函数定义:binary unhex(text str);
函数功能:把十六进制格式的字符串返回binary类型的值。
- 参数字符串中的字符必须合法的十六进制数字:“0”…“9”,“A”…“F”,“a”…”f”,如果参数遇到任何非十六进制数字,则返回NULL;
- 参数输入null传出null;
- 参数若为整数类型,将其转换字符串进行处理。
- 其他类型则返回NULL。
函数主要属性:
- proname:unhex
- pronamespace:8000(sys)
- prokind:f(普通函数)
- proisstrict:t
- provolatile:i
- proparallel:s