2012-06-15 16 views
5

Mi rendo conto che tinyint è un intero di un singolo byte (a proposito, è firmato o non firmato?). Che cosa significa l'argomento (3)? Ho cercato e non ho trovato la risposta.Che cosa significa tinyint (3) in SQL (SQLite)?

+0

sto usando SQLite e io don Non vedo alcuna differenza tra 'tinyint' e' tinyint (3) '. – mk12

+2

@ Mk12 È perché SQLite "mock implementa" i tipi di dati (in pratica accetta la sintassi ma in caso contrario la ignora). Leggi il manuale fine. –

risposta

3

Vedere this blog page sulle definizioni del tipo di colonna MySQL.

Per i tipi numerici il modificatore di lunghezza è in realtà la larghezza di visualizzazione, che non ha nulla a che fare con ciò che può essere memorizzato nel campo. Sì, è così - sia TINYINT (1) che TINYINT (4) possono memorizzare valori nell'intervallo -128..127 (o per i valori non firmati 0..255) e sono tipi di dati assolutamente identici, con una piccola svolta (che riguarda la data recupero - vedi sotto). Ecco spiegazione di ciò che si intende per larghezza di visualizzazione, prelevata direttamente dalla fonte:

L'ampiezza del dispositivo non vincolare la gamma di valori che possono essere memorizzati nella colonna, né il numero di cifre che vengono visualizzati per valori con larghezza superiore a quella specificata per la colonna. Ad esempio, una colonna specificata come SMALLINT (3) presenta il solito intervallo SMALLINT da -32768 a 32767 e vengono visualizzati valori al di fuori dell'intervallo consentito da tre caratteri utilizzando più di tre caratteri.

+0

La domanda riguardava SQLite, ma mi rendo conto che l'OP ha aggiunto questa precisione dopo aver risposto. L'altra risposta è più rilevante ora, non è sicuro del motivo per cui questo è accettato. – Benjamin

5

SQLite "utensileria finti" tipi di dati su colonne. Fondamentalmente, accetta la sintassi SQL standard, ma altrimenti la ignora. (Ma vedi tipo affinità e coercizione.)

Vedere Manifest Typing nella documentazione "differenze".

La maggior parte dei motori di database SQL utilizza la digitazione statica. Un tipo di dati è associato a ciascuna colonna in una tabella e solo i valori di quel particolare tipo di dati possono essere archiviati in quella colonna. SQLite rilassa questa restrizione utilizzando la digitazione manifest. Nella digitazione manifest, il tipo di dati è una proprietà del valore stesso, non della colonna in cui è memorizzato il valore. SQLite consente quindi all'utente di memorizzare qualsiasi valore di qualsiasi tipo di dati in qualsiasi colonna indipendentemente dal tipo dichiarato di tale colonna. (Ci sono alcune eccezioni a questa regola: una colonna integer PRIMARY KEY può solo numeri interi Store e tentativi SQLite per costringere valori nel tipo di dati dichiarato della colonna quando può..)

anche vedi Datatypes in SQLite Version 3 e tipo di affinità:

l'affinità di una colonna è determinato dal tipo dichiarato della colonna, in base alle seguenti regole nell'ordine indicato:

  • Se il tipo dichiarato contiene la stringa "INT", viene assegnata l'affinità INTEGER.

  • [altre regole omesse per brevità]


Per altri database, vedere la documentazione specifica del database appropriato :-)