0

次のような表現があることに気付きました。

DB.withConnection { implicit conn =>
  SQL("Select id, description FROM my_table WHERE id = {id}").on("id" -> 4)()
    .map {
      // TODO: Notice Integer.MAXVALUE = 2,147,483,647
      // How can I handle a value retrieved from a int(11) column ?
      case Row(id:Integer, Some(description:String) ) => 
            new UserInquiry(id.toLong, description)
    }

「id」列から取得した値を java.lang.Integer に変換します。列のサイズを 9 桁以上の長さで定義しない限り、それで問題ありません。これにより、テーブルの列に java.lang.Integer クラスが保持できるよりも大きな値を格納できます。

どうすればこの制限を乗り越えることができるでしょうか? 解決策は、Anorm を BigInt または Long に変換することですが、どうすればよいのでしょうか?

4

1 に答える 1

1

int(11) の 11 は単なるプレゼンテーション/フォーマットであるため、int は 4 バイトになり、最小値と最大値は Java 整数と同じになります。列が BigInt の場合、Integer が表現できる値よりも大きくなる可能性があるため、Long にマップする必要があります。

mysqlのint(11)の列のサイズは何バイトですか?

于 2013-10-14T08:43:23.280 に答える