在mysql中使用AES_ENCRYPT和VARCHAR

时间:2013-05-24 07:02:15

标签: mysql encryption sqldatatypes

我正在使用AES_ENCRYPT()AES_DECRYPT()来获取和解析mysql数据。无论我使用VARCHAR()还是VARBINARY(),事情都正常。但这仅适用于我正在检查的少量数据。我的记录已经是VARCHAR()格式,我更喜欢它们是这样的,加上我想要对这些用户进行加密的细节是他们的联系人和短信(可以根据需要随意添加,以便让您了解可能的数据大小)。现在,如果我使用VARCHAR()具有合理数量的字符长度,最好坚持使用VARCHAR()的东西或某个地方/某个时候由于某些原因或问题我将不得不转移到VARBINARY() ?请给我一些好的建议,以便我将VARBINARY()问题留在后面并继续使用我的VARCHAR()列类型。让我对它有所了解的问题是,当我谷歌搜索它时,我发现来自用户的混合响应,有些人说用户VARCHAR()和一些VARBINARY(),而有些根本没有问题,更令人担心的是MYSQL文档更喜欢或我说的是VARBINARY()。我知道这可能是因为数据返回在BINARY / BLOB fromat中,但那么为什么允许VARCHAR()类型?希望将清除我的问题的想法,谢谢

1 个答案:

答案 0 :(得分:1)

正如AES_ENCRYPT()所述:

  

AES_ENCRYPT()加密字符串并返回二进制字符串。

我似乎很清楚,结果应存储在二进制字符串类型列中,即VARBINARY

至于使用VARCHAR可能产生的问题:

  1. 根据您的字符集,某些字节序列可能无效并可能被拒绝;以及

  2. 有意无意的字符集转换可能会破坏您的密文。