2010-03-24 11 views
45

que sé sobre el booleancolumna de tipo, pero hay una booleanliteral en SQLite? En otros idiomas, esto podría ser true o false. Obviamente, puedo usar 0 y 1, pero tiendo a evitar los llamados "números mágicos" siempre que sea posible.¿Hay un literal booleano en SQLite?

De this list, parece que podría existir en otras implementaciones de SQL, pero no en SQLite. (Estoy usando SQLite 3.6.10, por lo que vale la pena.)

+1

Ver también http: // stackoverflow.com/questions/843780/store-boolean-value-in-sqlite – dat

Respuesta

62

Desde la sección 1.1 Boolean Datatype de los documentos:

SQLite no tiene una clase de almacenamiento de Boole separada. En cambio, los valores booleanos se almacenan como enteros 0 (falso) y 1 (verdadero).

Parece que está atrapado con 0 y 1.

+9

Vine aquí * después * de leer ese fragmento exacto de la documentación, que, en mi humilde opinión, es extremadamente ambiguo acerca de si '0' y' 1' tienen algún tipo de alias con los identificadores 'false' y' true', respectivamente, por el SQL de SQLite analizador –

+2

Lamentablemente, esta respuesta no responde a la pregunta, que no se trata de la clase de almacenamiento/* tipo de columna * sino del uso de los literales 'TRUE' y' FALSE' *, que son compatibles con SQL como [según el documento Postgresql ] (https://www.postgresql.org/docs/8.1/static/datatype-boolean.html). – Lloeki

+0

@Lloeki - Lamentablemente, hizo referencia a la documentación de Postgresql para una pregunta de SQLite ... –

6

1,1 Tipo de datos booleano

SQLite no tiene una clase de almacenamiento de Boole separada. En cambio, los valores booleanos se almacenan como enteros 0 (falso) y 1 (verdadero).

Docs

+5

Vine aquí * después * de leer ese bit exacto de la documentación, que, en mi humilde opinión, es extremadamente ambiguo acerca de si '0' y' 1' tienen algún tipo de alias con los identificadores 'false' y' true', respectivamente, por el analizador SQL de SQLite. –

+0

@ O.R.Mapper IMO falso y verdadero no existe en el mundo de SQLite. – Andrey

+5

Sí, pensé que sí, en función de las respuestas a esta pregunta, pero la parte citada de los documentos no está muy clara acerca de esa OMI. Dice que los valores booleanos son * almacenados * como los números '0' y' 1', respectivamente - y luego indica que esos números coinciden con * falso * y * verdadero *. ¿Qué son * falsos * y * verdaderos * allí? ¿Sugerencias en lenguaje natural para los lectores o constantes/alias entendidos por el analizador SQL de SQLite? Como dije, es muy ambigua la forma en que está escrito. –

0

No hay ningún tipo de datos booleanos. Solo hay 5 tipos, enumerados here. Los enteros se pueden almacenar con varios anchos en el disco, el más pequeño es de 1 byte. Sin embargo, este es un detalle de implementación:

"Pero tan pronto como valores enteros son leer fuera del disco y en la memoria para procesamiento, que se convierten al tipo de datos más general (8 bytes con signo número entero). "

Dado que no es sorprendente, no hay literales booleanos.

+0

Por otro lado, SQLite admite fechas y horas, a pesar de no ser uno de esos cinco tipos, por lo que esta respuesta no es concluyente. https://www.sqlite.org/datatype3.html#datetime –

-1

Hay solo 5 tipos de datos compatibles en SQLite3.

Del documento oficial de SQLite3. "Cada valor almacenado en una base de datos SQLite (o manipulada por el motor de base de datos) tiene una de las siguientes clases de almacenamiento:

NULL. The value is a NULL value. 

INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value." 

Si se va a almacenar 1s y 0s, a continuación, SQLite Wil utilizar 1 byte si el almacenamiento .. Lo cual no es malo Oficial de enlace Doc: - http://www.sqlite.org/datatype3.html

+0

Por otro lado, SQLite admite fechas y horas, a pesar de no ser uno de esos cinco tipos, por lo que esta respuesta no es concluyente. sqlite.org/datatype3.html # datetime –

-2

BOOLEANA -> numérico (Affinity)

columna de afinidad

SQLite admite el concepto de afinidad de tipos en columnas.Cualquier columna puede almacenar cualquier tipo de datos, pero la clase de almacenamiento preferida para una columna se llama afinidad. Cada columna de la tabla en una base de datos SQLite3 se le asigna una de las siguientes afinidades de tipo: Affinity Descripción

  • TEXTO tiendas de esta columna todos los datos utilizando las clases de almacenamiento NULL, texto o BLOB.
  • NUMERIC Esta columna puede contener valores utilizando las cinco clases de almacenamiento .
  • INTEGER Se comporta igual que una columna con afinidad NUMERIC con una excepción en una expresión CAST.
  • VERDADERO se comporta como una columna con afinidad NUMERIC, excepto que obliga a valores enteros en flotante representación de punto
  • NINGUNO Una columna con afinidad NONE no preferir una clase de almacenamiento sobre otro y no se hace ningún intento de datos coerce de un almacenamiento clase en otro.

un tipo booleano:

SQLite no tiene una clase de almacenamiento de Boole separada. En cambio, los valores booleanos se almacenan como enteros 0 (falso) y 1 (verdadero).

@ moiing-pato "Por otro lado, SQLite apoya datetimes, a pesar de no ser uno de esos cinco tipos, por lo que esta respuesta no es concluyente"

SQLite no tiene una clase de almacenamiento reservada para almacenar fechas y/o horas. En su lugar, la fecha y hora Funciones incorporadas de SQLite son capaces de almacenar fechas y horas como TEXTO, REAL, o INTEGER valores:

+0

Por otro lado, SQLite admite datetimes, a pesar de no ser uno de esos cinco tipos, por lo que esta respuesta no es concluyente. sqlite.org/datatype3.html#datetime –

+3

Bueno, eso fue agresivo. Como usted no entendió completamente mi punto, lo aclararé: El OP no pregunta si sqlite tiene una afinidad de columna booleana. El OP pregunta si Sqlite entiende "verdadero" y "falso". El hecho de que sqlite tenga funciones incorporadas para fechas y horas es una prueba de que centrarse en la afinidad es irrelevante para la pregunta. Si preguntaba si sqlite admite fechas y horas, la respuesta sería sí. –

-1

Noté en SQLite para android, puedo declarar una columna booleana escriba sin error y parece funcionar bien. También traté de definir la columna como 'int' y almacenar valores java booleanos. Descargué el db y confirmé que estoy escribiendo "verdadero" en la columna. Creo que solo funciona.

+0

'CREATE TABLE a (b BOOLEAN DEFAULT (TRUE));' falla porque no comprende 'TRUE'. –

4

la pregunta es explícitamente no sobre el tipo columna (es decir, en cuanto al almacenamiento), pero el uso de TRUE y FALSE literales (es decir, sabia analizador-), que son compatible con SQL como per the PostgreSQL keywords documentation (que pasa a incluir también SQL -92, SQL: 2008 y SQL: columnas 2011 en la tabla de referencia).

La documentación de SQLite enumera all supported keywords, y esta lista no contiene ni TRUE ni FALSE, por lo tanto, SQLite, lamentablemente no es conforme a este respecto.

También puede probar fácilmente y ver cómo el analizador barfs como quiera el token de ser un nombre de columna:

$ sqlite3 :memory: 
SQLite version 3.14.0 2016-07-26 15:17:14 
sqlite> CREATE TABLE foo (booleanish INT); 
sqlite> INSERT INTO foo (booleanish) VALUES (TRUE); 
Error: no such column: TRUE 
0

SQLite no tiene un tipo booleano, debe utilizar INTEGER con 0 es falsa y 1 es verdadero

+2

Su respuesta parece copiada de https://stackoverflow.com/a/2510670/3166697 –

Cuestiones relacionadas