Kapan saya harus menggunakan UNSIGNED dan SIGNED INT di MySQL? Apa yang lebih baik untuk digunakan atau ini hanya preferensi pribadi? Karena saya pernah melihatnya digunakan seperti ini;
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT
dan
id INT(11) NOT NULL AUTO_INCREMENT
Jawaban:
UNSIGNED
hanya menyimpan bilangan positif (atau nol). Di sisi lain, bertanda dapat menyimpan angka negatif (misalnya, mungkin memiliki tanda negatif ).Berikut adalah tabel rentang nilai yang
INTEGER
dapat disimpan setiap jenis:Sumber: http://dev.mysql.com/doc/refman/5.6/en/integer-types.html
UNSIGNED
berkisar dari0
sampain
, sementara yang ditandatangani berkisar dari kira-n/2
- kira sampain/2
.Dalam hal ini, Anda memiliki
AUTO_INCREMENT
kolom ID, jadi Anda tidak akan memiliki negatif. Jadi, gunakanUNSIGNED
. Jika Anda tidak menggunakanUNSIGNED
untukAUTO_INCREMENT
kolom, nilai maksimum Anda yang mungkin adalah setengahnya (dan setengah negatif dari rentang nilai tidak akan digunakan).sumber
UNSIGNED
khusus MySQL dan bukan fitur SQL standar. Ini berarti bahwa penggunaanUNSIGNED
dapat membuat migrasi di masa mendatang ke RDBMS yang berbeda menjadi lebih rumit atau menyebabkan Anda kesulitan saat menggunakan pustaka perangkat lunak yang menargetkan SQL standar seperti SQLAlchemy. Saya pikir ini harus menjadi bagian dari jawabannya.Gunakan
UNSIGNED
untuk bilangan bulat non-negatif.sumber
Pada dasarnya
UNSIGNED
, Anda memberi diri Anda ruang dua kali lebih banyak untuk bilangan bulat karena Anda secara eksplisit menentukan bahwa Anda tidak memerlukan angka negatif (biasanya karena nilai yang Anda simpan tidak akan pernah negatif).sumber
Saya tidak setuju dengan vipin cp .
Yang benar adalah bit pertama digunakan untuk mewakili tanda. Tetapi 1 untuk negatif dan 0 untuk nilai positif. Lebih dari nilai negatif dikodekan dengan cara yang berbeda (komplemen dua). Contoh dengan TINYINT:
sumber
Untuk nilai integer negatif,
SIGNED
digunakan dan untuk nilai integer non-negatif,UNSIGNED
digunakan. Itu selalu disarankan untuk menggunakanUNSIGNED
id sebagai KUNCI UTAMA.sumber
Satu hal yang ingin saya tambahkan dalam a
signed int
, yaitudefault value in mysql
,1 bit
akan digunakan untuk mewakilisign
.-1 for negative and 0 for positive.
Jadi, jika aplikasi Anda hanya memasukkan nilai positif, sebaiknya gunakan unsigned.sumber
Jika Anda mengetahui jenis nomor yang akan Anda simpan, Anda dapat memilih yang sesuai. Dalam hal ini Anda memiliki 'id' yang tidak pernah bisa negatif. Jadi Anda bisa menggunakan unsigned int. Rentang int bertanda tangan: -n / 2 hingga + n / 2 Rentang unsigned int: 0 hingga n Jadi Anda memiliki dua kali jumlah bilangan positif yang tersedia. Pilih yang sesuai.
sumber
Saya pikir,
UNSIGNED
akan menjadi pilihan terbaik untuk menyimpan sesuatu sepertitime_duration
(Misalnya :)resolved_call_time = resolved_time(DateTime)-creation_time(DateTime)
nilai dalam format menit atau jam atau detik yang pasti akan menjadi angka non-negatifsumber