MySQL - 实现将字符串编码为二进制字段的函数
MySQL - Implementing a function encoding a string into a binary field
在MySQL 中有一个名为UNHEX
的函数,它接受像'1DB8948899F511E6A18374D02B45FC30'
这样的字符串并将其转换为二进制字段的位序列。这是我用来存储 UUID
s 的东西。反向操作在函数HEX
.
中实现
我存储蛋白质序列,每个蛋白质序列都是一个有限的字母序列,最多有21个不同的字母。我不想将每个序列存储为明文,而是将它们存储为二进制字段。
因此我想实现一个自定义函数,类似于UNHEX
,它将每个字母替换为给定的 5 位序列(这个位数就足够了)。我也会实行互惠
如何实现这样的功能?
我研究了函数 COMPRESS
,但是当 运行 长度在 63、64 左右的序列时它提供了更长的输出,并且长度低于 150 的序列的压缩因子小于1.6
我将使用自定义函数实现的压缩系数。长度小于 150 的序列很多,因此,使用 COMPRESS
.
函数我不会有太大收获
我的MySQL版本是14.14 Distrib 5.5.52,for debian-linux-gnu (x86_64),你可以把一个蛋白质序列想象成一个有限的字母序列从A到U(实际字母在这里不相关,我会修改代码)。
我想做的是一个函数,它将由从 A 到 U 的这些字母组成的字符串作为参数,并将它们转换为一个位序列。因为 2^4 < 21 <= 2^5
,每个字母需要 5 位且足够了。
我正在考虑为 MySQL 制作一个插件,它将定义这两个功能。我走得太远了吗?有没有更简单的方法?如果是这样,这些功能是否会通过编程到插件中来提高效率?
我需要调整函数base64encode 和base64decode。
这些功能的来源可在此处找到:
https://github.com/y-ken/mysql-udf-base64/blob/master/base64.c
在MySQL 中有一个名为UNHEX
的函数,它接受像'1DB8948899F511E6A18374D02B45FC30'
这样的字符串并将其转换为二进制字段的位序列。这是我用来存储 UUID
s 的东西。反向操作在函数HEX
.
我存储蛋白质序列,每个蛋白质序列都是一个有限的字母序列,最多有21个不同的字母。我不想将每个序列存储为明文,而是将它们存储为二进制字段。
因此我想实现一个自定义函数,类似于UNHEX
,它将每个字母替换为给定的 5 位序列(这个位数就足够了)。我也会实行互惠
如何实现这样的功能?
我研究了函数 COMPRESS
,但是当 运行 长度在 63、64 左右的序列时它提供了更长的输出,并且长度低于 150 的序列的压缩因子小于1.6
我将使用自定义函数实现的压缩系数。长度小于 150 的序列很多,因此,使用 COMPRESS
.
我的MySQL版本是14.14 Distrib 5.5.52,for debian-linux-gnu (x86_64),你可以把一个蛋白质序列想象成一个有限的字母序列从A到U(实际字母在这里不相关,我会修改代码)。
我想做的是一个函数,它将由从 A 到 U 的这些字母组成的字符串作为参数,并将它们转换为一个位序列。因为 2^4 < 21 <= 2^5
,每个字母需要 5 位且足够了。
我正在考虑为 MySQL 制作一个插件,它将定义这两个功能。我走得太远了吗?有没有更简单的方法?如果是这样,这些功能是否会通过编程到插件中来提高效率?
我需要调整函数base64encode 和base64decode。 这些功能的来源可在此处找到:
https://github.com/y-ken/mysql-udf-base64/blob/master/base64.c