在 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
SET NAMES utf8mb4;
在 Java 中将您的文本列作为普通 String 对象查询,您应该会看到正确显示的表情符号(不需要字节数组或 Base64 编码)。
【讨论】:
【参考方案2】:根据***:
当需要对二进制数据进行编码时,通常会使用 Base64 编码方案,这些二进制数据需要通过旨在处理文本数据的媒体进行存储和传输。这是为了确保数据在传输过程中保持完好无损。
除非您有特定原因,否则我不建议您将应用中的所有内容都传递到 Base64 中的后端 Web 服务。
【讨论】:
【参考方案3】:也许,您可以在 sqlite 数据库中使用 BLOB 类型字段...
BLOB。该值是一团数据,完全按照输入的方式存储。
Sqlite.Org - DataTypes
【讨论】:
以上是关于在 BASE64 中对每个字符串进行编码以存储在 Mysql 中是不是很好?的主要内容,如果未能解决你的问题,请参考以下文章
在 Typescript 中对嵌入的 PDF 进行 Base64 解码