将每个字符串编码为 BASE64 以存储在 Mysql 中是否很好?
Is it good to encode each string in BASE64 for storing in Mysql?
在我的 android 应用程序中,存储在 mysql 数据库中的每个字符串都经过编码。
我这样做是因为我在字符串中有表情符号,这是我找到的唯一方法。
编码:
byte[] data = str.getBytes("UTF-8");
String base64String = Base64.encodeToString(data, Base64.DEFAULT);
解码:
byte[] data = Base64.decode(userObject.getString("mystr"), Base64.DEFAULT);
String question = new String(data, "UTF-8");
根据维基百科:
当需要对二进制数据进行编码时,通常会使用 Base64 编码方案,而这些二进制数据需要通过旨在处理文本数据的媒体进行存储和传输。这是为了保证数据在传输过程中保持完整不被修改。
除非您有特殊原因,否则我不建议将所有内容从您的应用程序传递到 Base64 中的后端 Web 服务。
你说得对,你应该用更简单的方式保存文本数据。您提到的表情符号问题可以通过将数据库表的默认字符集更改为 utf8mb4 来解决。
您可以通过执行以下步骤来完成此操作:
使用此 SQL 语句更改 MySQL 数据库中表的字符集
像这样:
ALTER TABLE your_table_name charset=utf8mb4,
MODIFY COLUMN your_fieldname1 VARCHAR(255) CHARACTER SET utf8mb4,
MODIFY COLUMN your_fieldname2 VARCHAR(255) CHARACTER SET utf8mb4;
将此添加到 MySQL conf 文件并重新启动或重新加载服务器(通常位于 /etc/mysql/my.cnf 或类似位置)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
- 每次您在 Android 应用程序中访问数据库时
执行下一个查询:
SET NAMES utf8mb4;
- 在 Java 中将您的文本列作为普通字符串对象查询,您应该会看到正确显示的表情符号(不需要字节数组或 Base64 编码)。
也许,您可以在 sqlite 数据库上使用 BLOB 类型字段...
BLOB. The value is a blob of data, stored exactly as it was input.
在我的 android 应用程序中,存储在 mysql 数据库中的每个字符串都经过编码。 我这样做是因为我在字符串中有表情符号,这是我找到的唯一方法。
编码:
byte[] data = str.getBytes("UTF-8");
String base64String = Base64.encodeToString(data, Base64.DEFAULT);
解码:
byte[] data = Base64.decode(userObject.getString("mystr"), Base64.DEFAULT);
String question = new String(data, "UTF-8");
根据维基百科:
当需要对二进制数据进行编码时,通常会使用 Base64 编码方案,而这些二进制数据需要通过旨在处理文本数据的媒体进行存储和传输。这是为了保证数据在传输过程中保持完整不被修改。
除非您有特殊原因,否则我不建议将所有内容从您的应用程序传递到 Base64 中的后端 Web 服务。
你说得对,你应该用更简单的方式保存文本数据。您提到的表情符号问题可以通过将数据库表的默认字符集更改为 utf8mb4 来解决。
您可以通过执行以下步骤来完成此操作:
使用此 SQL 语句更改 MySQL 数据库中表的字符集 像这样:
ALTER TABLE your_table_name charset=utf8mb4, MODIFY COLUMN your_fieldname1 VARCHAR(255) CHARACTER SET utf8mb4, MODIFY COLUMN your_fieldname2 VARCHAR(255) CHARACTER SET utf8mb4;
将此添加到 MySQL conf 文件并重新启动或重新加载服务器(通常位于 /etc/mysql/my.cnf 或类似位置)
character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
- 每次您在 Android 应用程序中访问数据库时
执行下一个查询:
SET NAMES utf8mb4;
- 在 Java 中将您的文本列作为普通字符串对象查询,您应该会看到正确显示的表情符号(不需要字节数组或 Base64 编码)。
也许,您可以在 sqlite 数据库上使用 BLOB 类型字段...
BLOB. The value is a blob of data, stored exactly as it was input.