Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.

Okładka posta: Czym różni się int od bigint w Ruby? Minimalne i maksymalne wartości.
Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
W Ruby istnieje tylko jeden typ liczb całkowitych — Integer. W poprzednich wersjach Ruby istniały osobne klasy dla liczb całkowitych o różnych rozmiarach, takie jak Fixnum dla małych liczb całkowitych i Bignum dla dużych liczb całkowitych. Począwszy od wersji Ruby 2.4, te klasy zostały połączone w jedną klasę Integer.
W Ruby nie ma podziału na int i bigint, jak w bazach danych. Jedyna klasa Integer może reprezentować zarówno małe, jak i duże liczby całkowite. Ta cecha pozwala Ruby bez problemu pracować z dowolnymi liczbami całkowitymi, niezależnie od ich rozmiaru.
13.class
=> Integer

9223372036854775808.class
=> Integer
Jednak w kontekście baz danych, takich jak PostgreSQL, często spotykamy typy danych int i bigint, które reprezentują odpowiednio 32-bitowe i 64-bitowe liczby całkowite. W Ruby możemy pracować z dowolnym z tych typów danych, ale trzeba rozumieć, jak różnią się one w bazie danych oraz jak Ruby radzi sobie z dużymi liczbami.

Różnica między int a bigint

Jeśli uprościć - bigint może mieć większą maksymalną liczbę całkowitą. To znaczy, że jeśli włożymy zbyt dużą liczbę do int - otrzymamy błąd. Do tego potrzebujemy typu danych, który może przyjąć większe wartości. To jest przydatne w kontekście dużych baz danych. Jeśli wiesz, że baza będzie duża - używaj bigint. W przeciwnym razie w pewnym momencie będziesz musiał pisać migracje z int do bigint (dług techniczny będzie się kumulować, można tego uniknąć, znając przybliżoną / potencjalną skalę bazy danych).

Minimalne i maksymalne wartości int i bigint

Ok. Policzmy maksymalne liczby, które mogą mieć int i bigint:
# Minimalna i maksymalna wartość dla int (32-bitowa liczba całkowita)
min_int = -2**31
max_int = 2**31 - 1
puts "Min int: #{min_int}, Max int: #{max_int}"
Min int: -2147483648, Max int: 2147483647
# Minimalna i maksymalna wartość dla bigint (64-bitowa liczba całkowita)
min_bigint = -2**63
max_bigint = 2**63 - 1
puts "Min bigint: #{min_bigint}, Max bigint: #{max_bigint}"
Min bigint: -9223372036854775808, Max bigint: 9223372036854775807
Jeśli dodasz wartość poza tymi zakresami - otrzymasz błąd SQL:
ERROR:  integer out of range # dla int
ERROR:  bigint out of range  # dla bigint
Jeśli spróbujesz zapisać wartość przez aplikację Rails - zobaczysz błąd ActiveRecord.

Ten post nie ma jeszcze żadnych dodatków od autora.

Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?
29 maj 09:30

Czy Ruby tworzy nową kopię obiektu podczas przypisywania zmiennej do zmiennej?

meme code
meme code@memecode
Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?
29 maj 12:00

Jaka jest różnica między wartością bezpośrednią a referencją w Ruby?

meme code
meme code@memecode
Dlaczego kod Ruby zwraca nil po wykonaniu puts?
29 maj 20:30

Dlaczego kod Ruby zwraca nil po wykonaniu puts?

meme code
meme code@memecode
Jaka jest różnica między nil a false w Ruby?
29 maj 20:59

Jaka jest różnica między nil a false w Ruby?

meme code
meme code@memecode
Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?
31 maj 14:39

Dlaczego pusty ciąg (string) w Ruby nie jest fałszem?

meme code
meme code@memecode
Zakres widoczności zmiennej lokalnej w Ruby
3 cze 16:46

Zakres widoczności zmiennej lokalnej w Ruby

meme code
meme code@memecode
Co oznacza błąd 'is out of range' w Ruby on Rails? Błąd zakresu - Liczba całkowita z limitem 4 bajtów
13 cze 07:18

Co oznacza błąd 'is out of range' w Ruby on Rails? Błąd zakresu - Liczba całkowita z limitem 4 bajtów

meme code
meme code@memecode
Czym jest niemutowalność i mutowalność?
19 cze 07:48

Czym jest niemutowalność i mutowalność?

meme code
meme code@memecode
[Ruby] Co zwróci wynik dodawania 10.5 i 10?
23 cze 13:23

[Ruby] Co zwróci wynik dodawania 10.5 i 10?

meme code
meme code@memecode
[Ruby] Czym różnią się zmienne zaczynające się od @, @@ i $?
23 cze 14:00

[Ruby] Czym różnią się zmienne zaczynające się od @, @@ i $?

meme code
meme code@memecode
Co to jest funkcja w programowaniu?
24 cze 18:15

Co to jest funkcja w programowaniu?

meme code
meme code@memecode
[Fix] extconf.rb nie powiódł się podczas instalacji biblioteki Ruby Gosu
27 cze 16:38

[Fix] extconf.rb nie powiódł się podczas instalacji biblioteki Ruby Gosu

meme code
meme code@memecode