在BASE64中编码每个字符串以便存储在Mysql中是否很好?

时间:2015-11-10 16:45:52

标签: android mysql json encode

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

3 个答案:

答案 0 :(得分:1)

你是对的,你应该以更简单的方式保存文本数据。您可以解决使用emojis提到的问题,将数据库表的默认字符集更改为utf8mb4。

您可以通过执行以下步骤来实现这一目标:

  1. 使用此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;

  2. 将此添加到MySQL conf文件并重新启动或重新加载服务器(通常位于/etc/mysql/my.cnf或类似)

    character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci

  3. 每次在Android应用程序中访问数据库时 执行下一个查询:SET NAMES utf8mb4;
  4. 在Java中将您的文本列查询为普通的String对象,您应该看到表情符号正确显示(不需要字节数组或Base64编码)。

答案 1 :(得分:0)

根据维基百科:

当需要编码需要通过设计用于处理文本数据的媒体进行存储和传输的二进制数据时,通常使用Base64编码方案。这是为了确保数据在运输过程中保持完整而不进行修改。

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

答案 2 :(得分:0)

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

  

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

Sqlite.Org - DataTypes