열의 선호도는 해당 열에 저장되는 데이터의 권장 유형입니다. INSERT 또는 UPDATE 문을 통해 값이 열에 저장되면 런타임에서 값을 원래 데이터 유형에서 지정된 선호도로 변환하려고 합니다. 예를 들어 ActionScript 또는 JavaScript Date 인스턴스인 Date 값을 선호도가 TEXT인 열에 삽입하면 Date 값이 String 표현으로 변환된 후 데이터베이스에 저장됩니다. 이는 객체의 toString() 메서드를 호출하는 것과 같습니다. 값을 지정된 선호도로 변환할 수 없으면 오류가 발생하고 작업이 수행되지 않습니다. SELECT 문을 사용하여 데이터베이스에서 검색한 값은 선호도에 해당하는 클래스의 인스턴스로 반환됩니다. 이는 해당 값이 다른 데이터 유형에서 변환되어 저장되었는지 여부와 관계가 없습니다.
열에 NULL 값을 사용할 수 있으면 ActionScript 또는 JavaScript 값인 null을 매개 변수 값으로 사용하여 열에 NULL을 저장할 수 있습니다. SELECT 문에서 NULL 저장소 클래스 값이 검색되면 이 값은 열의 선호도에 관계없이 항상 ActionScript 또는 JavaScript 값인 null로 반환됩니다. 열에 NULL 값을 사용할 수 있는 경우 항상 해당 열에서 검색된 값이 null인지 확인한 후 값을 Number 또는 Boolean 등의 nullable이 아닌 유형으로 변환해야 합니다.
데이터베이스의 각 열에는 다음과 같은 유형 선호도 중 하나가 할당됩니다.
TEXT 또는 STRING
NUMERIC
INTEGER 또는 int
REAL 또는 NUMBER
BOOLEAN
DATE
XML
XMLLIST
Object
NONE
TEXT 또는 STRING
선호도가 TEXT 또는 STRING인 열은 저장소 클래스 NULL, TEXT 또는 BLOB을 사용하여 모든 데이터를 저장합니다. 선호도가 TEXT인 열에 숫자 데이터를 삽입하면 숫자 데이터가 텍스트로 변환된 후 저장됩니다.
NUMERIC
선호도가 NUMERIC인 열은 저장소 클래스 NULL, REAL 또는 INTEGER를 사용하여 값을 저장합니다. NUMERIC 열에 텍스트 데이터를 삽입하면 텍스트 데이터를 정수나 실수로 변환한 후 저장합니다. 변환에 성공하면 INTEGER 또는 REAL 저장소 클래스를 사용하여 값이 저장됩니다. 예를 들어 '10.05' 값은 REAL 저장소 클래스로 변환된 후 저장됩니다. 변환할 수 없으면 오류가 발생하며 NULL 값으로 변환되지는 않습니다. NUMERIC 열에서 검색된 값은 해당 값에 맞는 가장 구체적인 숫자 유형의 인스턴스로 반환됩니다. 즉, 값이 양의 정수이거나 0이면 uint 인스턴스로 반환됩니다. 음의 정수이면 int 인스턴스로 반환됩니다. 마지막으로 값이 정수가 아니고 부동 소수점 구성 요소가 있으면 Number 인스턴스로 반환됩니다.
INTEGER 또는 int
INTEGER 선호도를 사용하는 열의 비헤이비어는 선호도가 NUMERIC인 열과 같지만 한 가지 예외가 있습니다. 저장할 값이 부동 소수점 구성 요소가 없는 Number 인스턴스 등의 실수이거나 부동 소수점 구성 요소가 없는 실수로 변환될 수 있는 텍스트 값이면 값이 정수로 변환되고 INTEGER 저장소 클래스를 사용하여 저장됩니다. 부동 소수점 구성 요소가 있는 실수를 저장하려고 하면 오류가 발생합니다.
REAL 또는 NUMBER
선호도가 REAL 또는 NUMBER인 열의 비헤이비어는 선호도가 NUMERIC인 열과 같지만 정수 값을 부동 소수점 표현으로 나타낸다는 점이 다릅니다. REAL 열의 값은 데이터베이스에서 항상 Number 인스턴스로 반환됩니다.
BOOLEAN
선호도가 BOOLEAN인 열은 true 또는 false 값을 저장합니다. BOOLEAN 열은 ActionScript 또는 JavaScript Boolean 인스턴스인 값을 받아들입니다. 코드에서 String 값을 저장하려고 하면 길이가 0보다 큰 String은 true로, 빈 String은 false로 간주됩니다. 코드에서 숫자 데이터를 저장하려고 하면 0이 아닌 값은 true로, 0은 false로 간주됩니다. SELECT 문을 사용하여 검색한 부울 값은 Boolean 인스턴스로 반환됩니다. NULL이 아닌 값은 INTEGER 저장소 클래스(false는 0, true는 1)를 사용하여 저장되고 데이터를 검색할 때 Boolean 객체로 변환됩니다.
DATE
선호도가 DATE인 열은 날짜 및 시간 값을 저장합니다. DATE 열은 ActionScript 또는 JavaScript Date 인스턴스인 값을 받아들이도록 설계되었습니다. DATE 열에 String 값을 저장하려고 하면 런타임에서 값을 Julian 날짜로 변환하려고 합니다. 변환에 실패하면 오류가 발생합니다. 코드에서 Number, int 또는 uint 값을 저장하려고 하면 데이터의 유효성이 검사되지 않고 값이 유효한 Julian 날짜 값으로 간주됩니다. SELECT 문을 사용하여 검색한 DATE 값은 자동으로 Date 인스턴스로 변환됩니다. DATE 값은 REAL 저장소 클래스를 사용하여 Julian 날짜 값으로 저장되므로 정상적으로 정렬 및 비교할 수 있습니다.
XML 또는 XMLList
XML 또는 XMLLIST 선호도를 사용하는 열은 XML 구조를 저장합니다. 코드에서 SQLStatement 매개 변수를 사용하여 XML 열에 데이터를 저장하려고 하면 런타임에서 ActionScript XML() 또는 XMLList() 함수를 사용하여 값을 변환하고 유효성을 검사합니다. 값을 유효한 XML로 변환할 수 없으면 오류가 발생합니다. INSERT INTO (col1) VALUES ('Invalid XML (no closing tag)')와 같이 리터럴 SQL 텍스트 값이 사용된 데이터를 저장하려고 하면 값이 파싱되거나 유효성이 검사되지 않고 올바른 형식으로 간주됩니다. 잘못된 값이 저장된 경우 값을 검색하면 빈 XML 객체가 반환됩니다. XML 및 XMLList 데이터는 TEXT 저장소 클래스나 NULL 저장소 클래스를 사용하여 저장됩니다.
Object
선호도가 OBJECT인 열은 ActionScript 또는 JavaScript의 복잡한 객체를 저장합니다. 여기에는 Object 클래스 인스턴스뿐 아니라 Array 인스턴스 등의 Object 하위 클래스 인스턴스 및 사용자 정의 클래스 인스턴스가 포함됩니다. OBJECT 열 데이터는 AMF3 형식으로 직렬화되며 BLOB 저장소 클래스를 사용하여 저장됩니다. 값을 검색하면 값이 AMF3에서 비직렬화되어 저장된 클래스의 인스턴스로 반환됩니다. 특히 표시 객체를 비롯한 일부 ActionScript 클래스는 원래 데이터 유형의 인스턴스로 비직렬화할 수 없습니다. 사용자 정의 클래스 인스턴스를 저장하기 전에 flash.net.registerClassAlias() 메서드를 사용하거나 Flex에서 클래스 선언에 [RemoteObject] 메타데이터를 추가하여 클래스의 별칭을 등록해야 합니다. 또한 데이터를 검색하기 전에 클래스의 같은 별칭을 등록해야 합니다. 클래스를 근본적으로 비직렬화할 수 없거나 클래스 별칭이 누락되었거나 불일치하여 데이터를 제대로 비직렬화할 수 없으면 데이터가 익명 객체(Object 클래스 인스턴스)로 반환되며 해당 속성 및 값은 저장된 원래 인스턴스와 일치합니다.
NONE
선호도가 NONE인 열은 특정 저장소 클래스를 선호하지 않습니다. 데이터는 변환되지 않고 그대로 삽입됩니다.
선호도 결정
열의 선호도는 CREATE TABLE 문에서 열에 선언된 유형에 따라 결정됩니다. 유형을 결정할 때는 대/소문자를 구별하지 않으며 다음과 같은 규칙이 적용됩니다.
열의 데이터 유형에 "CHAR", "CLOB", "STRI" 또는 "TEXT" 문자열이 들어 있으면 해당 열의 선호도는 TEXT/STRING입니다. VARCHAR 유형에는 "CHAR" 문자열이 들어 있으므로 TEXT 선호도가 할당됩니다.
열의 데이터 유형에 "BLOB" 문자열이 들어 있거나 데이터 유형이 지정되지 않았으면 열의 선호도가 NONE입니다.
열의 데이터 유형에 "XMLL" 문자열이 들어 있으면 열의 선호도가 XMLLIST입니다.
데이터 유형이 "XML" 문자열이면 열의 선호도가 XML입니다.
데이터 유형에 "OBJE" 문자열이 들어 있으면 열의 선호도가 OBJECT입니다.
데이터 유형에 "BOOL" 문자열이 들어 있으면 열의 선호도가 BOOLEAN입니다.
데이터 유형에 "DATE" 문자열이 들어 있으면 열의 선호도가 DATE입니다.
데이터 유형에 "INT" 문자열("UINT" 포함)이 들어 있으면 INTEGER 선호도가 할당됩니다.
열의 데이터 유형에 "REAL", "NUMB", "FLOA" 또는 "DOUB" 문자열이 들어 있으면 열의 선호도가 REAL/NUMBER입니다.
어떠한 조건에도 맞지 않으면 선호도가 NUMERIC입니다.
CREATE TABLE t AS SELECT... 문을 사용하여 테이블을 만든 경우 모든 열에 데이터 유형이 지정되지 않으며 NONE 선호도가 지정됩니다.