No SQLite, a seguinte instrução seria bem-sucedida e a cadeia seria inserida / atualizada na SALARY
coluna do tipo INTEGER
:
update employee set salary='TOO MUCH' where emp_id=1;
Observe que zero não será inserido / atualizado, mas a sequência "MUITO" real , portanto, não se trata de conversão de tipos automáticos.
O FAQ declara:
Este é um recurso , não um bug. SQLite usa digitação dinâmica. Não impõe restrições de tipo de dados. Dados de qualquer tipo podem (geralmente) ser inseridos em qualquer coluna. Você pode colocar seqüências de caracteres arbitrárias em colunas inteiras, números de ponto flutuante em colunas booleanas ou datas em colunas de caracteres. O tipo de dados que você atribui a uma coluna no comando CREATE TABLE não restringe os dados que podem ser colocados nessa coluna. Cada coluna é capaz de conter uma cadeia de comprimento arbitrária. (Há uma exceção: as colunas do tipo INTEGER PRIMARY KEY podem conter apenas um número inteiro assinado de 64 bits. Ocorrerá um erro se você tentar colocar algo diferente de um número inteiro em uma coluna INTEGER PRIMARY KEY.)
Portanto, esse comportamento é claramente intencional, no entanto, eu me pergunto por que o SQLite tem esse comportamento, já que a maioria dos outros bancos de dados SQL que eu conheço se comporta de maneira bastante diferente, eles gerariam um erro ou converteriam a cadeia 0, ao tentar inserir uma cadeia não numérica em uma coluna numérica.
A biblioteca SQLite seria menos útil sem esse comportamento?
Isso foi feito por design para manter a biblioteca pequena e rápida?
A biblioteca SQLite seria significativamente mais lenta ou maior para gerar erros ao tentar inserir uma string em uma coluna numérica?