source

이행 시 부동이지만 이중화되지 않는 필드를 작성하는 방법

gigabyte 2022. 10. 30. 17:53
반응형

이행 시 부동이지만 이중화되지 않는 필드를 작성하는 방법

기존 데이터베이스 구조를 다시 만들기 위해 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또는DOUBLEMySQL에 있습니다.이 기능은 다음에만 속합니다.DECIMAL소수점 제로를 원하시면 어떤 형태로든INT다른 한편으로, 아마도 당신의frequency기가헤르츠에 있나요?어느 시점에서FLOAT 정확도나 소수점 없이 하는 이 가장 적절합니다.

1GHz는 에 맞지 않습니다.FLOAT(8,2), 단, 에 들어갑니다.FLOAT.

왜 둘 다?FLOAT4 바이트가 소요됩니다.DOUBLEtakes 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

반응형