在 MySQL 中存储 unicode 字节的正确方法是什么?

What is the proper way to store unicode bytes in MySQL?

我正在使用 mysql-连接器,我想在 MySQL 数据库中存储一些数据。我使用 PyCrypto 应用 EAS 加密,结果产生如下所示的字节字符串:

encrypted_data = b'\xd5\x9e\xea \x8d\xc4\xa6P\x93>\xda\x045\xd6\xfa8'

在我的数据库中存储 encrypted_data 的最有效方法是什么?

一个想法是将unicode字节转换为十六进制并存储为VARCHAR。虽然在那种情况下我需要两倍的存储空间 space.

另一个想法是在 MySQL 中对其进行加密。虽然因为我也在 python 中使用了其他加密和散列函数,我更愿意在 python 中完成所有加密工作,这样代码更有条理和可读性。

无论Python或MySQL中的数据是否加密,加密后的数据都应存储在二进制列中。

Many encryption and compression functions return strings for which the result might contain arbitrary byte values. If you want to store these results, use a column with a VARBINARY or BLOB binary string data type. This will avoid potential problems with trailing space removal or character set conversion that would change data values, such as may occur if you use a nonbinary string data type (CHAR, VARCHAR, TEXT).

少量加密数据应存储为 varbinary, this is analogous to varchar. Larger amounts of encrypted data should be stored as a blob,这是 text.

的二进制版本

MySQL has encryption and decryption functions,但您仅限于 AES。如果您对 Python 中的加密感到满意,请使用 Python。请务必将其加密为二进制数据,而不是十六进制,并将其存储在二进制列中。那将是最有效和最安全的。