【问题标题】:Store BigInteger into Mysql将 BigInteger 存储到 Mysql 中
【发布时间】:2011-05-21 11:15:51
【问题描述】:

由于数学限制,我必须使用 BigInteger 类来表示值。

经过一些计算,我想将结果(由 2x BigInteger 实例给出)存储到 Mysql...

存储此类对象的最佳数据类型是什么?

我正在考虑使用 Blob 来存储这些结果的二进制格式(128 位)?但我想避免不必要的类型转换。

【问题讨论】:

  • bigint 还不够吗? (只有 8 个字节)

标签: java mysql database biginteger


【解决方案1】:

MySQL 有一个 BIGINT 数据类型,如:http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

您可以尝试使用 BIGINT,而不是转换为二进制格式,这在我看来更加复杂。

【讨论】:

  • MySQL 中的 BIGINT 数据类型无法保持我的价值! 2^128 > 18446744073709551615(最大 BIGINT 无符号值)!
  • 我猜这不再是真正的 BigInteger 了……它远远超过了 BigInteger 的具体大小。
  • BigInteger 在不同的上下文中有不同的含义。该问题被标记为“java”,其中 BigInteger 表示任意精度。
  • @thotheolh java 的原始 long 与 mysql 的 bigint 具有相同的范围。 java 的 biginteger 是为大于 long 的值设计的,因此也适用于大于 mysql 的 bigint 的值
【解决方案2】:

我建议使用 Blob,然后使用 BigInteger(byte[] val) 构造函数从字节数组转到 BigInteger,然后使用 BigInteger#toByteArray() 方法。

【讨论】:

  • 比较怎么样。我想存储和比较 biginteger。
  • 据我所知,mysql不支持任意大的数字。
【解决方案3】:
MySQL Type      Java Type
----------------------------------------
CHAR            String
VARCHAR         String
LONGVARCHAR     String
NUMERIC         java.math.BigDecimal
DECIMAL         java.math.BigDecimal
BIT             boolean
TINYINT         byte
SMALLINT        short
INTEGER         int
BIGINT          long
REAL            float
FLOAT           double
DOUBLE          double
BINARY          byte []
VARBINARY       byte []
LONGVARBINARY   byte []
DATE            java.sql.Date
TIME            java.sql.Time
TIMESTAMP       java.sql.Tiimestamp

Reference

【讨论】:

【解决方案4】:

为了在 MySQL 中存储 bigInteger 值,我们可以存储为字符串:

  1. biginteger 转换为string

    String s=bigint_value.toString();
    
  2. s 存储在text 类型的表字段中;例如如果我们将s 存储在一个名为big_values 的表中,其中包含big_value_as_string 字段:

    CREATE TABLE big_values (big_value_as_string text);
    

    该值现在已存储。

要检索我们必须:

  1. 从表中检索字符串值:

    String bg = rs.getString("big_value_as_string");
    
  2. 将字符串转换为bigInteger类型:

    BigInteger b = new BigInteger(bg);
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 2011-02-08
    • 2011-03-25
    • 2015-08-26
    • 1970-01-01
    相关资源
    最近更新 更多