En kolumns
tillhörighet
är den rekommenderade datatypen i den kolumnen. När ett värde lagras i en kolumn (via INSERT eller UPDATE), försöker körtidsbiblioteket att konvertera det värdet från den faktiska datatypen till den specificerade tillhörigheten. Om till exempel ett värde med datatypen DATE (en ActionScript- eller JavaScript-instans) infogas i en kolumn vars tillhörighet är TEXT, kommer datumvärdet att konverteras till strängrepresentation (motsvarande anrop av objektets toString()-metod) innan värdet lagras i databasen. Om värdet inte kan konverteras till den specificerade tillhörigheten inträffar ett fel och åtgärden utförs inte. När ett värde hämtas från databasen med SELECT, returneras den som en instans av den klass som motsvarar tillhörigheten oavsett om den konverterades från en annan datatyp när den lagrades.
Om en kolumn accepterar NULL-värden, kan ActionScript- eller JavaScript-värdet null användas som ett parametervärde för att lagra NULL i kolumnen. När ett värde med lagringsklassen NULL hämtas med SELECT, returneras det som ActionScript- eller JavaScript-värdet null, oavsett kolumnens tillhörighet. Om en kolumn accepterar NULL-värden, måste du alltid kontrollera de värden som hämtas från den kolumnen för att bestämma om de är null innan du försöker konvertera värdet till en typ som inte kan vara null (som ett numeriskt eller ett booleskt värde).
Varje kolumn i databasen tilldelas en av följande typtillhörigheter:
-
TEXT (eller String)
-
NUMERIC
-
INTEGER (eller int)
-
REAL (eller Number)
-
Boolean
-
Date
-
XML
-
XMLLIST
-
Object
-
NONE
TEXT (eller String)
En kolumn med tillhörigheterna TEXT eller String lagrar alla data med lagringsklasserna NULL, TEXT eller BLOB. Om numeriska data infogas i en kolumn med tillhörigheten TEXT, konverteras de till textform innan de lagras.
NUMERIC
En kolumn med tillhörigheten NUMERIC innehåller värden där lagringsklasserna NULL, REAL eller INTEGER används. När textdata infogas i en NUMERIC-kolumn, görs ett försök att konvertera värdet till ett heltal eller till ett reellt tal innan det lagras. Om konvertering genomförs, lagras värdet med hjälp av lagringsklasserna INTEGER eller REAL (till exempel konverteras värdet '10,05' till lagringsklassen REAL innan det lagras). Om konverteringen inte kan utföras uppstår ett fel. Inget försök görs att konvertera ett NULL-värde. Ett värde som hämtas från en NUMERIC-kolumn returneras som en instans av den mest specifika numeriska typen till vilken värdet passar. Om värdet är ett positivt heltal eller 0, returneras det alltså som en uint-instans. Om det är ett negativt heltal, returneras det som en int-instans. Om värdet har en flyttalskomponent (värdet är inte ett heltal), returneras det som en Number-instans.
INTEGER (eller int)
En kolumn som använder tillhörigheten INTEGER fungerar på samma sätt som en kolumn med NUMERIC-tillhörighet, fast med ett undantag. Om värdet som ska lagras är ett reellt värde (som en instans av Number) utan flyttalskomponent, eller om värdet är ett textvärde som kan konverteras till ett reellt värde utan flyttalskomponent, konverteras det till ett heltal och lagras med lagringsklassen INTEGER. Om ett försök görs att lagra ett reellt värde med en flyttalskomponent uppstår ett fel.
REAL (eller Number)
En kolumn med tillhörigheten REAL eller NUMBER fungerar på samma sätt som en kolumn med tillhörigheten NUMERIC, förutom att den tvingar heltalsvärden till flyttalsrepresentation. Ett värde i en REAL-kolumn returneras alltid från databasen som en Number-instans.
Boolean
En kolumn med tillhörigheten Boolean lagrar sanna eller falska värden. En Boolean-kolumn accepterar ett värde som är en ActionScript- eller JavaScript-instans av Boolean. Om koden försöker lagra ett strängvärde, betraktas ett strängvärde med en längd större än noll som sann och en tom sträng som falsk. Om koden försöker lagra numeriska data, lagras värden som inte är noll som sanna och 0 lagras som falskt. När ett booleskt värde hämtas med SELECT, returneras värdet som en Boolean-instans. NULL-skilda värden lagras med lagringsklassen INTEGER (0 för falskt och 1 för sant) och konverteras till Boolean-objekt när data hämtas.
Date
En kolumn med tillhörigheten Date lagrar datum och tid. En Date-kolumn är avsedd att acceptera värden som är ActionScript- eller JavaScript-instanser av Date. Om försök görs att lagra ett strängvärde i en Date-kolumn, försöker körtidsbiblioteket konvertera värdet till ett julianskt datum. Om konverteringen misslyckas uppstår ett fel. Om koden försöker att lagra ett värde av typen Number, int eller uint, görs inga försök att validera data och värdet betraktas som ett giltigt julianskt datumvärde. Ett Date-värde som hämtas med SELECT konverteras automatiskt till en Date-instans. Date-värden lagras som julianska datumvärden med lagringsklassen REAL, och sorterings- och jämförelseåtgärder fungerar som förväntat.
XML eller XMLList
En kolumn som använder tillhörigheten XML- eller XMLList lagrar XML-strukturer. Om koden försöker lagra data i en XML-kolumn med en SQLStatement-parameter, försöker körtidsbiblioteket att konvertera och validera värdet med ActionScript-funktionen XML() eller XMLList(). Ett fel uppstår om värdet inte kan konverteras till giltig XML. Om försöket att lagra data använder ett literalt SQL-textvärde (till exempel INSERT INTO (col1) VALUES ('Invalid XML (ingen avslutningstagg)'), undersöks eller valideras inte värdet, utan textvärdet antas att vara välformad XML. Om ett ogiltigt värde lagras, returneras det när det hämtas som ett tomt XML-objekt. XML- och XMLList-data lagras med lagringsklassen TEXT eller NULL.
Object
En kolumn med tillhörigheten Object lagrar ActionScript- eller JavaScript-objekt som är komplexa, inklusive objektklassinstanser och instanser av programsatser för underklasser som arrayer och anpassade klassinstanser. Object-kolumndata är serialiserade i AMF3-format och lagras med lagringsklassen BLOB. När ett värde hämtas, deserialiseras det från AMF3 och returneras som en instans av samma klass som när den lagrades. Observera att några ActionScript-klasser, speciellt visningsobjekt, inte kan deserialiseras som instanser av deras originaldatatyp. Innan du lagrar en egen klassinstans måste du registrera ett alias för klassen med metoden flash.net.registerClassAlias() (eller i Flex genom att lägga till [RemoteObject]-metadata i klassdeklarationerna). Dessutom måste du innan du hämtar data registrera samma alias för klassen. Data som inte kan deserialiseras ordentligt, antingen på grund av att klassen inte kan deserialiseras eller att klassalias saknas eller är felkopplade, returneras som ett anonymt objekt (en Object-klassinstans) med egenskaper och värden som motsvarar den lagrade originalinstansen.
NONE
En kolumn med tillhörigheten NONE föredrar inte en viss lagringsklass framför en annan. Det görs inga försök att konvertera data innan de infogas.
Bestämma tillhörighet
Typtillhörigheten för en kolumn bestäms av den deklarerade typen för kolumnen i programsatsen CREATE TABLE. När typen bestäms gäller följande regler (inte skiftlägeskänsliga):
-
Om kolumnens datatyp innehåller några av strängarna CHAR, CLOB, STRI eller TEXT har kolumnen tillhörigheten TEXT/String. Observera att typen VARCHAR innehåller strängen CHAR och därför tilldelas tillhörigheten TEXT.
-
Om kolumnens datatyp innehåller strängen BLOB, eller om ingen datatyp är specificerad, har kolumnen tillhörigheten NONE.
-
Om datatypen för kolumnen innehåller strängen XMLL, har kolumnen tillhörigheten XMLList.
-
Om datatypen är strängen XML, har kolumnen tillhörigheten XML.
-
Om datatypen innehåller strängen OBJE, har kolumnen tillhörigheten Object.
-
Om datatypen innehåller strängen BOOL, har kolumnen tillhörigheten Boolean.
-
Om datatypen innehåller strängen DATE, har kolumnen tillhörigheten Date.
-
Om datatypen innehåller strängen INT (inklusive UINT) ges den tillhörigheten INTEGER/int.
-
Om kolumnens datatyp innehåller några av strängarna REAL, NUMB, FLOA eller DOUB får kolumnen tillhörigheten REAL/Number.
-
I annat fall är tillhörigheten NUMERIC.
-
Om en tabell skapas med CREATE TABLE t AS SELECT... har inga kolumner en specificerad datatyp och de får samtliga tillhörigheten NONE.