Dalam SQLite pernyataan berikut akan berhasil dan string akan dimasukkan / diperbarui ke dalam SALARY
kolom yang bertipe INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Perhatikan bahwa nol tidak akan dimasukkan / diperbarui tetapi string "TERLALU JAUH" yang sebenarnya , jadi ini bukan tentang konversi jenis automatis.
FAQ menyatakan:
Ini adalah fitur , bukan bug. SQLite menggunakan pengetikan dinamis. Itu tidak menegakkan batasan tipe data. Data jenis apa pun dapat (biasanya) dimasukkan ke dalam kolom apa pun. Anda dapat menempatkan string panjang acak ke dalam kolom integer, angka floating point di kolom boolean, atau tanggal di kolom karakter. Tipe data yang Anda tetapkan untuk kolom dalam perintah CREATE TABLE tidak membatasi data apa yang dapat dimasukkan ke dalam kolom itu. Setiap kolom dapat memiliki string panjang acak. (Ada satu pengecualian: Kolom tipe INTEGER PRIMARY KEY hanya dapat menampung bilangan bulat bertanda 64-bit. Kesalahan akan terjadi jika Anda mencoba memasukkan apa pun selain bilangan bulat ke dalam kolom INTEGER PRIMARY KEY kolom.)
Jadi perilaku ini jelas disengaja, namun saya bertanya - tanya mengapa SQLite memiliki perilaku ini, karena sebagian besar database SQL lain yang saya tahu berperilaku sangat berbeda, mereka akan menimbulkan kesalahan, atau mengonversi string 0, ketika mencoba memasukkan string non-numerik ke dalam kolom angka
Apakah perpustakaan SQLite menjadi kurang bermanfaat tanpa perilaku ini?
Apakah ini dibuat dengan desain agar perpustakaan tetap kecil dan cepat?
Apakah pustaka SQLite secara signifikan lebih lambat atau lebih besar untuk menimbulkan kesalahan ketika mencoba memasukkan string ke dalam kolom numerik?