TO_BASE64
功能描述
TO_BASE64函数根据BASE64编码规则,将一个字符串编码成BASE64编码格式,返回字符串的编码结果。
返回值类型:text
编码规则
将输入的每三个字节(24位)变成四个字节(32位):6位为一组,高位补两个0,组成一个字节,这样正好能将三个字节补成四个字节,其中每个字节只会对应0(00000000)到63(00111111)。
每76个字符加一个换行符。
编码0(00000000)到61(00111111)对应A-Z,a-z,0-9共62个字符,62(00111110)的编码是
+
,63(00111111)的编码是/
。若输入的字符串字节数不为三的倍数,那么剩余的字节根据编码规则转换,若有一个字节不满8位,则在低位补0补满8位,同时用“=”将转换结果补满四个字节。若最后一组只有两个字节,每6位一组,第三组只有4位,低位要补两个0,然后这三组再分别高位补两个0,转成三个字符,末尾补一个“=”;若最后一组只有一个字节,每6位一组,第二组只有2位,低位要补四个0,然后这两组再分别高位补两个0,转成两个字符,末尾补两个“=”。
注意事项
- 该功能仅在数据库兼容模式为MySQL时支持(即数据库初始化时指定DBCOMPATIBILITY='B')。
- 如果输入的是NULL,那么返回的结果为NULL。
语法格式
TO_BASE64(str)
参数说明
str
待编码的任意长度字符串。
示例
示例1: 对字符串'abc'
进行编码。
SELECT TO_BASE64('abc');
返回结果如下:
to_base64
-----------
YWJj
(1 row)
编码过程分析
1、将字符串用二进制表示:01100001(a)01100010(b)01100011(c)
。
2、将二进制串拆分,每6位一组:011000 010110 001001 100011
。
3、在每一组的高位都补上两个0:00011000 00010110 00001001 00100011
。
4、查找base64编码转换表:00011000,00010110,00001001,00100011
对应的字符为:Y,W,J,j。故编码结果为YWJj
。
示例2: 对字符串'ab'
进行编码。
SELECT TO_BASE64('ab');
返回结果为:
to_base64
-----------
YWI=
(1 row)
编码过程分析
1、将字符串用二进制表示:01100001(a)01100010(b)
。
2、将二进制串拆分,每6位一组,由于最后一组只有4位,在低位补0补够6位:011000 010110 0010(00)
。
3、在每一组的高位都补上两个0:00011000 00010110 00001000
。
4、查找base64编码转换表:00011000,00010110,00001000
对应的字符为:Y,W,I。
5、由于输入的字符串字节数不为三的倍数,导致转换后的字符数不为4的倍数,所以最后需要用=号补满4个字节,最终编码结果为:YWI=
。