Play 2.2 для Scala: ограничения размера Anorm и java.lang.Integer

Я заметил, что такое выражение:

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, но как?


person Max    schedule 13.10.2013    source источник


Ответы (1)


11 в int(11) просто представление/форматирование, поэтому int будет 4 байта и будет иметь те же минимальные и максимальные значения, что и java Integer. Если бы столбец был BigInt, вам пришлось бы сопоставить его с Long, поскольку он может быть больше, чем значения, которые может представлять целое число.

Каков размер столбца int (11) в mysql в байтах?

person johanandren    schedule 14.10.2013
comment
Это действительно удивительно! Приходя из мира Oracle, я никогда бы не подумал об этом. Большое спасибо. - person Max; 14.10.2013