InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby gibt es nur einen Typ von Ganzzahlen – Integer. In früheren Versionen von Ruby gab es separate Klassen für Ganzzahlen unterschiedlicher Größen, wie Fixnum für kleine Ganzzahlen und Bignum für große Ganzzahlen. Seit Ruby 2.4 wurden diese Klassen in einer einzigen Klasse Integer zusammengeführt.
In Ruby gibt es keine Unterscheidung zwischen int und bigint, wie in Datenbanken. Die einzige Klasse Integer kann sowohl kleine als auch große Ganzzahlen darstellen. Dieses Merkmal ermöglicht es Ruby, problemlos mit beliebigen Ganzzahlen zu arbeiten, unabhängig von ihrer Größe.
13.class => Integer 9223372036854775808.class => Integer
Im Kontext von Datenbanken wie PostgreSQL begegnen wir häufig den Datentypen int und bigint, die 32-Bit- bzw. 64-Bit-Ganzzahlen darstellen. In Ruby können wir mit jedem dieser Datentypen arbeiten, aber es ist wichtig zu verstehen, wie sie sich in der Datenbank unterscheiden und wie Ruby mit großen Zahlen umgeht.
Unterschied zwischen int und bigint
Vereinfacht gesagt – bigint kann eine größere maximale Ganzzahl haben. Das heißt, wenn man eine zu große Zahl in int eingibt, erhalten wir einen Fehler. Dafür benötigen wir einen Datentyp, der größere Werte annehmen kann. Dies ist im Kontext großer Datenbanken nützlich. Wenn Sie wissen, dass die Datenbank groß sein wird – verwenden Sie bigint. Andernfalls müssen Sie irgendwann Migrationen von int zu bigint schreiben (technische Schulden werden sich anhäufen, dies kann vermieden werden, wenn man den ungefähren / potenziellen Umfang der Datenbank kennt).
Minimale und maximale Werte für int und bigint
Okay. Lassen Sie uns die maximalen Zahlen berechnen, die int und bigint haben können:
# Minimale und maximale Werte für int (32-Bit-Ganzzahl)
min_int = -2**31
max_int = 2**31 - 1
puts "Min int: #{min_int}, Max int: #{max_int}"
Min int: -2147483648, Max int: 2147483647
# Minimale und maximale Werte für bigint (64-Bit-Ganzzahl)
min_bigint = -2**63
max_bigint = 2**63 - 1
puts "Min bigint: #{min_bigint}, Max bigint: #{max_bigint}"
Min bigint: -9223372036854775808, Max bigint: 9223372036854775807
Wenn man Zahlen außerhalb dieser Bereiche hinzufügt oder subtrahiert, erhalten wir einen SQL-Fehler:
ERROR: integer out of range # für int ERROR: bigint out of range # für bigint
Wenn Sie versuchen, Werte über die Rails-App zu speichern, werden Sie ActiveRecord-Fehler sehen.
Dieser Beitrag hat noch keine Ergänzungen vom Autor.