2013-10-13 1 views
0

я заметил, что выражение как этот:Играть 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, но как?

ответ

1

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

What is the size of column of int(11) in mysql in bytes?

+0

Это действительно удивительно! Исходя из мира Oracle, я бы никогда не подумал об этом. Большое спасибо. – Max

 Смежные вопросы

  • Нет связанных вопросов^_^