在 BASE64 中对每个字符串进行编码以存储在 Mysql 中是不是很好?

Posted

技术标签:

【中文标题】在 BASE64 中对每个字符串进行编码以存储在 Mysql 中是不是很好?【英文标题】:Is it good to encode each string in BASE64 for storing in Mysql?在 BASE64 中对每个字符串进行编码以存储在 Mysql 中是否很好? 【发布时间】:2016-02-11 15:15:29 【问题描述】:

在我的 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");

【问题讨论】:

解决方案看起来很奇怪。这意味着您将无法通过这些字段在 DB 中进行搜索...例如 select *from XXX where myField like '%abc%' 是的,搜索将是一场噩梦 哦我忘了!!那么如何存储表情符号? 【参考方案1】:

你是对的,你应该以更简单的方式保存文本数据。您提到的表情符号问题可以通过将数据库表的默认字符集更改为 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 中将您的文本列作为普通 String 对象查询,您应该会看到正确显示的表情符号(不需要字节数组或 Base64 编码)。

【讨论】:

【参考方案2】:

根据***:

当需要对二进制数据进行编码时,通常会使用 Base64 编码方案,这些二进制数据需要通过旨在处理文本数据的媒体进行存储和传输。这是为了确保数据在传输过程中保持完好无损。

除非您有特定原因,否则我不建议您将应用中的所有内容都传递到 Base64 中的后端 Web 服务。

【讨论】:

【参考方案3】:

也许,您可以在 sqlite 数据库中使用 BLOB 类型字段...

BLOB。该值是一团数据,完全按照输入的方式存储。

Sqlite.Org - DataTypes

【讨论】:

以上是关于在 BASE64 中对每个字符串进行编码以存储在 Mysql 中是不是很好?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React 中对输入进行 base64 编码?

在 Typescript 中对嵌入的 PDF 进行 Base64 解码

如何在angular js中对登录服务进行base64编码

如何在 Python 中对 PDF 文件进行 base64 编码

用于解码/编码修改后的 base64 URL 的代码

Swift 中的 Base64 编码不会在 Android 中解码