KingbaseES 实现MYSQL hex/unhex 函数

MySQL 的hex 和 unhex 函数类似于KingbaseES 的encode 和 decoding,实现字符与16进制之间的转换。

一、先看MySQL例子

复制代码
mysql> select hex('kingbase');
+------------------+
| hex('kingbase')  |
+------------------+
| 6B696E6762617365 |
+------------------+
1 row in set (0.00 sec)

mysql> select unhex(hex('kingbase'));
+------------------------+
| unhex(hex('kingbase')) |
+------------------------+
| kingbase               |
+------------------------+
1 row in set (0.00 sec)
复制代码

二、再看KingbaseES

复制代码
test=# set bytea_output='escape';
SET
test=# select encode('kingbase','hex'); 
      encode      
------------------
 6b696e6762617365
(1 row)

test=# select decoding(encode('kingbase','hex'),'hex');
 decoding 
----------
 kingbase
(1 row)
复制代码

三、包装hex/unhex 函数

复制代码
create function hex(text) returns text immutable strict as $$
  select encode($1::bytea, 'hex')
$$
language sql;

create function hex(bytea) returns text immutable strict as $$
  select encode($1, 'hex')
$$
language sql;


create function unhex(text) returns text immutable strict as $$
  select encode(decoding($1, 'hex'),'escape')
$$
language sql;

create function unhex(bytea) returns text immutable strict as $$
  select encode(decoding($1, 'hex'),'escape')
$$
language sql;
复制代码

四、加解密函数包装

复制代码
首先创建扩展:create extension kbcrypto;

create function AES_ENCRYPT(data TEXT,key TEXT) returns BYTEA immutable strict as $$
  select encrypt($1::BYTEA,$2::BYTEA,'aes-ecb/pad:pkcs')
$$
language sql ;

create function AES_DECRYPT(data text,key TEXT) returns BYTEA immutable strict as $$
  select decrypt($1::BYTEA,$2::BYTEA,'aes-ecb/pad:pkcs')
$$
language sql;
复制代码

五、使用例子

复制代码
test=# select hex('kingbase');
       hex        
------------------
 6b696e6762617365
(1 row)

test=# select unhex(hex('kingbase'));
  unhex   
----------
 kingbase
(1 row)

test=# select AES_ENCRYPT('kingbase','123');
            aes_encrypt             
------------------------------------
 \x98986cf7143047f1463f2170a49feb02
(1 row)

test=# set bytea_output='escape';
SET
test=# select AES_DECRYPT(AES_ENCRYPT('kingbase','123'),'123');
 aes_decrypt 
-------------
 kingbase
(1 row)
复制代码

 

posted @   KINGBASE研究院  阅读(480)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示