MySQL中的二进制/字符串转换

时间:2016-03-11 16:54:19

标签: mysql json

为了存档/历史目的,在对MySQL中的表执行UPDATE之后,我将此表中相关字段的快照存储为更改日志表的TEXT字段中的JSON。如果一个表有一个varbinary字段来安全地存储敏感信息,我通过将varbinary字段转换为CHAR来存储varbinary字段的字符串表示,因为我无法将二进制数据序列化为JSON。我这样做了:

SELECT CAST(BinaryField AS CHAR) as CastedValue FROM table

二进制字段的示例值为:0x774751ECAEC2D03703805E07AB0B8356 和铸造价值是:wGQ���7�^��V

使用MySQL aes_encrypt函数和密钥将原始值存储在varbinary字段中。

当我尝试使用aes_decrypt解密此转换值时,它返回NULL:

SELECT cast(aes_decrypt('wGQ���7�^��V' ,'mykey') as char) as thedata ;

如何从已转换的二进制值中恢复原始值?

1 个答案:

答案 0 :(得分:0)

加密数据是一个8位字节的数组,没有编码。实际上,许多字节和字节序列没有UTF-8(或任何有意义的)字符表示。

当数据被解密时,它会回到它的原始编码。

没有" cast",严格来说你是如何查看字节的,它是一种编码,它给出了字节除了8位以外的一些含义。