java - 在 varchar 列中存储快速编码数据

标签 java database encoding compression varchar

我正在使用 Snappy-java 对 JSON 数据进行编码,我想将结果存储在数据库中的 varchar 列中。
数据库为oracle数据库,编码为ISO-8859-1。
我在插入数据时遇到编码问题。 Oracle 似乎无法识别某些字符。

我找到了一种解决方法,即在插入压缩数据之前对其使用 Base64 编码。然后我就可以很好地检索它:)

问题是 Base64 编码增加了我要存储的数据的长度,从而减少了使用 Snappy 节省的成本...

所以我的问题是:如何存储该数据而不用 Base64 进行编码? 我想使用 varchar 的原因是因为我希望能够使用 oracle 索引访问表而无需访问表(性能绝对是一个问题)。

我也尝试过其他压缩算法,但它们似乎都有同样的问题。 我也看过 yEnc 但我找不到任何 java 编码器。而且我不确定我是否理解 yEnc 列出的所有问题,所以我有点不愿意使用它。

非常感谢您的帮助!

最佳答案

您正在压缩数据。压缩的结果几乎总是二进制数据,而不是文本......我认为 Snappy 也是如此。

要准确地将二进制数据存储为文本,您应该使用诸如 Base64 之类的东西。您没有字符 - 您有字节。

为了有效地存储压缩文本,您应该将数据库列更改为面向二进制的类型而不是面向文本的类型(基本上是 BLOB 而不是 CLOB)。

关于java - 在 varchar 列中存储快速编码数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689749/

相关文章:

sql - 奇怪的编码问题 ¶

r - 使用 okinas 和其他夏威夷变音符号修改文本字符串

c# - 网络客户端编码

java - 罗盘针绘制在错误的位置

java - 在Java中为24小时时间添加冒号?

Java:使用 super 调用时隐藏父类(super class)字段的值是多少?

mysql - 在SQL中将两列值相除并将结果插入新列

c# - 安装后设置服务依赖

mysql - 将记录序列存储到数据库中的特定 ID

java - 使用java和面向对象创建联系人列表