JavaScript에서 밀리초 동안 BIGINT가 필요하기 전에 유니버스가 축소됩니다.

SQL 데이터베이스에서는 주로 SMALLINT 2¹⁵-1 , INTEGER 2³¹-1BIGINT 2⁶³-1 로 정수를 저장할 수 있습니다. INT는 너무 작습니다. SMALLINT는 밀리초가 49.7일에 불과하므로 INTEGER만 남게 되며 까다로운 부분인 JavaScript 숫자가 나타납니다.

The MAX_SAFE_INTEGER constant has a value of 9007199254740991 (9,007,199,254,740,991 or ~9 quadrillion). The reasoning behind that number is that JavaScript uses double-precision floating-point format numbers as specified in IEEE 754 and can only safely represent integers between -2⁵³+1 and 2⁵³–1.
For larger integers, consider using BigInt.



누가 JS에서 bigint를 좋아합니까? 숫자를 사용하기 전에 숫자를 bigint로 변환해야 합니다. API JSON 응답에 bigint를 전달할 수 없으며 까다롭습니다. 이것이 제 팀원이 최근 프로젝트에서 직면한 정확한 문제입니다. 그래서 뭘 할건데?

우리는 예측 가능한 미래에 2⁵³ 밀리초를 절대 초과하지 않을 것이라고 가정할 수 있습니다. 그와 통화하면서 대략적으로 계산을 해보니 우주의 수명인 134억년 이상인 줄 알았는데 키보드를 만져보니 285년밖에 되지 않았다. 427년. 이 숫자는 매우 극적이지만 미래의 사람들이 서비스가 웹 페이지의 날짜를 엉망으로 만드는 이유를 검색하는 코드를 디버깅할 수 있도록 하기에는 충분합니다.

이것이 바로 DrizzleORM에서 bigints 및 bigserials에 대한 구성을 생성한 이유입니다.

bigserial("will_be_number", maxBytes: "max_bytes_53");
bigserial("will_be_bigint", maxBytes: "max_bytes_64");


감사해요!

좋은 웹페이지 즐겨찾기