如何解决在MySQL中存储unicode字节的正确方法是什么?
我正在使用mysql-connector,我想在MySQL数据库中存储一些数据。我使用PyCrypto进行了EAS加密,其结果是一个字节字符串,如下所示:
encrypted_data = b'\xd5\x9e\xea \x8d\xc4\xa6P\x93>\xda\x045\xd6\xfa8'
在我的数据库中存储encrypted_data
的最有效方法是什么?
一种想法是将unicode字节转换为十六进制并将其存储为VARCHAR
。尽管在那种情况下,我将需要两倍的存储空间。
另一个想法是在MySQL内部对其进行加密。尽管由于我还使用python中的其他加密和哈希函数,所以我更喜欢使用python中的所有加密方法,以使代码更加井井有条和可读性。
解决方法
无论您是使用Python还是MySQL加密数据,加密的数据都应存储在二进制列中。
许多加密和压缩函数都返回字符串,其结果可能包含任意字节值。如果要存储这些结果,请使用具有VARBINARY或BLOB二进制字符串数据类型的列。这样可以避免因删除尾部空格或字符集转换而导致数据值更改的潜在问题,例如如果您使用非二进制字符串数据类型(CHAR,VARCHAR,TEXT),则可能会发生这种情况。
少量加密数据应存储为varbinary
,类似于varchar
。大量的加密数据应存储为text
的二进制版本blob
。
MySQL has encryption and decryption functions,但您仅限使用AES。如果您对使用Python进行加密感到满意,请使用Python。只要确保将其加密为二进制数据(而不是十六进制),并将其存储在二进制列中即可。那将是最有效和最安全的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。