Trong SQLite, câu lệnh sau sẽ thành công và chuỗi sẽ được chèn / cập nhật vào SALARY
cột có kiểu INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Lưu ý rằng số 0 sẽ không được chèn / cập nhật mà là chuỗi "QUÁ NHIỀU" thực tế , vì vậy đây không phải là về chuyển đổi loại tự động.
Câu hỏi thường gặp nêu rõ:
Đây là một tính năng , không phải là một lỗi. SQLite sử dụng kiểu gõ động. Nó không thực thi các ràng buộc kiểu dữ liệu. Dữ liệu thuộc bất kỳ loại nào có thể (thường) được chèn vào bất kỳ cột nào. Bạn có thể đặt các chuỗi có độ dài tùy ý vào các cột số nguyên, số dấu phẩy động trong các cột boolean hoặc ngày trong các cột ký tự. Kiểu dữ liệu bạn gán cho một cột trong lệnh CREATE TABLE không hạn chế dữ liệu nào có thể được đưa vào cột đó. Mỗi cột có thể giữ một chuỗi độ dài tùy ý. .
Vì vậy, hành vi này rõ ràng là có chủ ý, tuy nhiên tôi tự hỏi tại sao SQLite có hành vi này, vì hầu hết các cơ sở dữ liệu SQL khác mà tôi biết có hành vi hoàn toàn khác, chúng sẽ phát sinh lỗi hoặc chuyển đổi chuỗi 0, khi cố gắng chèn một chuỗi không phải là số vào một cột số.
Thư viện SQLite sẽ ít hữu ích hơn nếu không có hành vi này?
Điều này được thực hiện bởi thiết kế để giữ cho thư viện nhỏ và nhanh?
Thư viện SQLite sẽ chậm hơn hoặc lớn hơn đáng kể để phát sinh lỗi khi triying chèn một chuỗi vào một cột số?