2010-06-23 2 views
14

Google 검색을 통해이 하나를 파악할 수 없습니다.MySQL의 'double'데이터 유형과 동일한 레일즈 이전은 무엇입니까?

유형이 double 인 일부 데이터베이스가있는 기존 데이터베이스가 있는데, 해당 레일 유형을 만들기 위해 레일즈 마이그레이션에서 무엇을 쓸 수 있습니까? 비교적 오래된 데이터베이스이고 완전히 사용할 수있는 더 적합한 데이터 유형이있을 수 있지만 다른 사람들이 생각한 것을보고 싶었습니다.

:decimal 유형을 사용하려고했는데, 이것이 최선의 선택입니까?

생각하십니까?

숫자 (정수/진수/플로트) 열 정의는 정수 열 형식의 바이트 수에 대한 :limit 옵션을 사용 더블에 대한 구체적인 형식이 없다

답변

10

, 레일 그것에 대해 현명하게 시도 플로트 옵션은 :scale/:precision입니다.

(정밀도는 유효 숫자의 수, 규모는 소수점이 가을의 얼마나 많은입니다.)

8

당신은 레일이 DOUBLE을 만들 수 있습니다. 나는 "공식적으로"어떻게 다음 솔루션을 지원하는지 모르겠다. 그러나 그것은 MySQL을 위해 작동한다. 그냥 53 예컨대 :

t.float :published_at, :limit => 53, :null => true

에 제한을 설정 나는 this blog post에서 대답을 얻었다 그곳이에 대한 좀 더 테스트 결과가있다.

+0

하지 않습니다) 5.1을 사용하고 있습니다 내 작품, 한도가 벗겨 내 스키마 내 존재하지 않습니다. rb (Rails 4.0) – gamov

4

이 솔루션에 문제가 있습니다. 나는이 같은 선언이있는 경우 :

t.float :latitude, :limit => 30 

모든 것이 멋지다 : 데이터베이스 스키마는 열이 더블로 선언 보여줍니다. 문제는 schema.rb에 제한값이 없기 때문에 스키마가 테스트 환경에 복제 될 때 열이 double이 아닌 float가됩니다. 열에 충분한 정확도가 없기 때문에 단위 테스트가 실패합니다. 최대 열 길이를 요청 - 제한 :

: 당신은 액티브 column definitions에 대한 문서를 보면

는 당신이 발견하는 것은 이것이다. 문자열의 길이는 다음과 같습니다. 의 텍스트 열과 바이트 수 : 2 진수 및 : 정수 열입니다.

플로트 주제에 대해 침묵합니다. 이것은 코드에서 보았을 때,이 솔루션이 어떻게 작동하는지에 대한 부작용 인 것으로 나타났습니다. schema.rb의 생성에 버그가있는 것 같습니다. 그렇지 않은 경우,이 방법으로 사용 된 적이 없었습니다.

답변 : 십진수 데이터 유형 (내가 상관하지 않음)이 완전히 지원되는 솔루션 일 수 있습니다. mysql2 (0.3와

MySQL은 (내 경우

20

(테스트 DB 준비).11) 드라이버) :

double(64,12) 

레일 (DB에서/schema.rb) : 레일의 현대 버전의

t.float :limit=>64     ==> failed 
    t.float :limit=>53     ==> occasionally succeeded 
    t.decimal :precision=>64, :scale=>12 ==> fully succeeded 
1

(내가

t.column :field, "double" 
관련 문제