이행 시 부동이지만 이중화되지 않는 필드를 작성하는 방법
기존 데이터베이스 구조를 다시 만들기 위해 Larabel의 마이그레이션 시스템을 사용하고 있습니다.테이블은 이 기존 데이터베이스의 테이블과 정확히 일치해야 합니다.
테이블의 필드 중 하나는 다음과 같이 설명됩니다.
`frequency` float unsigned NOT NULL DEFAULT 0,
Laravel 이행 매뉴얼을 보면 다음 옵션이 나타납니다.
$table->float('amount', 8, 2);
$table->double('column', 15, 8);
이 두 가지 컬럼유형은 모두 다음과 같이 작성됩니다.double
열에는 길이와 소수점을 입력합니다.하지만 특별히 정의되어 있는 것이 필요합니다.float
지정된 길이와 소수점 0을 사용하지 않습니다.
라라벨의 이행 시스템을 사용하는 것이 가능합니까?
larabel에서는 float type column을 만들 수 없습니다.컬럼 플로트에 DB:스테이트먼트를 사용하고 Schema::create에 DB::스테이트먼트를 쓰지 않도록 하기 위해 데이터베이스에 테이블이 존재하지 않기 때문에 오류가 발생합니다.
DB:문을 Schema::table에 씁니다(예: 코드):
Schema::table('api_logs', function (Blueprint $table) {
DB::statement('alter table `api_logs` add column `response_after` float null after request_at');
DB::statement('alter table `api_logs` add column `query_time` float null after response_after');
});
라버리안에게 더 잘 다가갈 수 있도록 이것을 상향 투표하세요.
사용 안 함(m,n)
에FLOAT
또는DOUBLE
MySQL에 있습니다.이 기능은 다음에만 속합니다.DECIMAL
소수점 제로를 원하시면 어떤 형태로든INT
다른 한편으로, 아마도 당신의frequency
기가헤르츠에 있나요?어느 시점에서FLOAT
정확도나 소수점 없이 하는 것이 가장 적절합니다.
1GHz는 에 맞지 않습니다.FLOAT(8,2)
, 단, 에 들어갑니다.FLOAT
.
왜 둘 다?FLOAT
4 바이트가 소요됩니다.DOUBLE
takes 8: 둘 다 거의 모든 컴퓨터 하드웨어가 구현하고 있는 IEEE-754 표준의 일부입니다.옛날에는 (1MB의 RAM이 '빅' 머신이었고, 표준이 80년대 초반으로 거슬러 올라가면) 4바이트를 절약하는 것은 큰 일이었습니다.Laravel이 플로트를 더블로 바꾸는 경우, 그것은 선택 사항입니다.MySQL은 어느쪽이든 선택합니다.
거의 모든 상황에서FLOAT
그리고.DOUBLE
값과 변수는 서로 교환할 수 있습니다.하지만... 저장되는 값FLOAT
같은 값이 저장되어 있습니다.DOUBLE
값이 불평등할 수 있습니다.예를 들어, 거의 모든 언어, 하드웨어 등에서 float(1.234) != double(1.234)을 사용합니다.
MySQL이 만족하는 것은frequency float unsigned NOT NULL DEFAULT 0
.
하지만 만약$table->float('amount', 8, 2);
in Laravel은 MySQL과 같은 의미입니다.FLOAT(8,2)
그러면 큰 문제가 생길 수 있습니다.
1234567.89
로 잘립니다.999999.99
.그리고.1.234
로 잘립니다.1.23
, 그 후 2진수로 반올림합니다.
라바랄의 버그 리포트인 것 같습니다.(죄송합니다만, 저는 라바랄을 사용한 적이 없기 때문에, 자세한 것은 알고 있습니다.MySQL과 IEEE-754는 알고 있습니다.)
언급URL : https://stackoverflow.com/questions/46957074/how-to-create-field-that-is-float-but-not-double-when-doing-migrations
'source' 카테고리의 다른 글
문자열 속성 값을 기준으로 개체 배열 정렬 (0) | 2022.10.30 |
---|---|
Selenium WebDriver에서 JavaScript를 사용하여 XPath로 요소를 가져오는 방법이 있습니까? (0) | 2022.10.30 |
테이블 nestj 자동 생성에 대한 TypeORM 요청 (0) | 2022.10.30 |
PHP 7의 <=>('Spaceship' 연산자)란 무엇입니까? (0) | 2022.10.30 |
어레이를 통해 구현된 스택을 사용한 패러테제스 매칭.balanced()를 사용하여 스택이 비어 있는지 체크하기 위해 모든 '(')'에 대해 '(')를 누르고 '(')를 팝핑했습니다. (0) | 2022.10.30 |