在 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 中完成所有加密工作,这样代码更有条理和可读性。


人到中年有点甜
浏览 134回答 1
1回答

翻翻过去那场雪

无论您是使用 Python 还是 MySQL 对数据进行加密,加密后的数据都应该存储在二进制列中。许多加密和压缩函数返回字符串,其结果可能包含任意字节值。如果要存储这些结果,请使用具有 VARBINARY 或 BLOB 二进制字符串数据类型的列。这将避免因删除尾随空格或更改数据值而导致的字符集转换的潜在问题,例如在使用非二进制字符串数据类型(CHAR、VARCHAR、TEXT)时可能发生的问题。少量加密数据应存储为varbinary,这类似于varchar. 大量加密数据应存储blob为text.MySQL 有加密和解密功能,但你仅限于 AES。如果您熟悉 Python 中的加密,请使用 Python。请务必将其加密为二进制数据,而不是十六进制,并将其存储在二进制列中。这将是最有效和最安全的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python