2012-06-15 27 views
5

Me doy cuenta de que tinyint es un número entero de un byte (por cierto, ¿está firmado o no?). ¿Qué significa el argumento (3)? He buscado y no he podido encontrar la respuesta.¿Qué significa tinyint (3) en SQL (SQLite)?

+0

estoy usando SQLite y Don No veo ninguna diferencia entre 'tinyint' y' tinyint (3) '. – mk12

+2

@ Mk12 Se debe a que SQLite "implementa de manera simulada" tipos de datos (básicamente, acepta la sintaxis pero, de lo contrario, la ignora). Lee el buen manual. –

Respuesta

3

Consulte this blog page sobre las definiciones del tipo de columna MySQL.

Para los tipos numéricos, el modificador de longitud es en realidad el ancho de visualización, que no tiene nada que ver con lo que se puede almacenar en el campo. Sí, eso es todo, tanto TINYINT (1) como TININT (4) pueden almacenar valores en el rango -128..127 (o para valores sin signo 0..255), y son tipos de datos absolutamente idénticos, con un pequeño giro (que se refiere a la fecha) recuperación - ver abajo). Aquí es explicación de lo que se entiende por ancho de la pantalla, tomada directamente de la fuente:

El ancho de la pantalla no limita la gama de valores que se pueden almacenar en la columna, ni el número de dígitos que se muestran para valores que tienen un ancho que excede el especificado para la columna. Por ejemplo, una columna especificada como SMALLINT (3) tiene el rango SMALLINT habitual de -32768 a 32767, y los valores fuera del rango permitido por tres caracteres se muestran con más de tres caracteres.

+0

La pregunta era sobre SQLite, pero me doy cuenta de que el OP agregó esta precisión después de que usted respondió. La otra respuesta es más relevante ahora, no estoy seguro de por qué esta es aceptada. – Benjamin

5

SQLite "implementos" mock-tipos de datos en columnas . Básicamente, acepta la sintaxis SQL estándar, pero de lo contrario lo ignora. (Pero consulte afinidad de tipos y coacciones.)

Consulte Manifest Typing en la documentación de "diferencias".

La mayoría de los motores de bases de datos SQL utilizan tipado estático. Un tipo de datos está asociado a cada columna en una tabla y solo se permiten almacenar valores de ese tipo de datos en particular en esa columna. SQLite relaja esta restricción mediante el uso de tipado manifiesto. En tipado manifiesto, el tipo de datos es una propiedad del valor en sí, no de la columna en la que se almacena el valor. SQLite le permite al usuario almacenar cualquier valor de cualquier tipo de datos en cualquier columna, independientemente del tipo declarado de esa columna. (Hay algunas excepciones a esta regla: Una columna INTEGER PRIMARY KEY puede sólo enteros almacenar y intentos de SQLite a coaccionar valores en el tipo de datos declarado de la columna cuando puede..)

también ver Datatypes in SQLite Version 3 y tipo afinidad:

la afinidad de una columna está determinada por el tipo declarado de la columna, de acuerdo con las siguientes reglas en el orden mostrado:

  • Si el tipo declarado contiene la cadena "INT" entonces se le asigna una afinidad INTEGER.

  • [otras reglas omitidas por brevedad]


Para otras bases de datos, consulte la documentación de base de datos específica adecuada :-)