Podczas tworzenia tabeli w bazie danych instrukcja SQL przeznaczona do utworzenia tabeli definiuje powinowactwo lub typ danych dla każdej kolumny w tabeli. Możliwe jest pominięcie deklaracji powinowactwa, jednak dobrym rozwiązaniem jest jawne zadeklarowanie powinowactwa kolumny w instrukcjach SQL
CREATE TABLE
.
Zwykle obiekt zapisany w bazie danych za pomocą instrukcji
INSERT
jest zwracany jako instancja tego samego typu danych po wykonaniu instrukcji
SELECT
. Jednak typ danych pobranej wartości może być inny w zależności od powinowactwa kolumny bazy danych, w której zapisana jest wartość. Gdy wartość jest zapisana w kolumnie, a jej typ danych nie jest zgodny z powinowactwem kolumny, wówczas baza danych podejmuje próbę konwersji wartości w celu dopasowania jej do powinowactwa kolumny. Na przykład: jeśli kolumna bazy danych jest zadeklarowana z powinowactwem
NUMERIC
, wówczas baza danych podejmuje próbę konwersji wstawionych danych na klasę zapisu liczb (
INTEGER
lub
REAL
) przed zapisaniem danych. Baza danych zgłasza błąd, jeśli nie ma możliwości konwersji danych. Zgodnie z tą regułą: jeśli ciąg znaków „12345” zostanie wstawiony do kolumny
NUMERIC
, wówczas przed zapisaniem w bazie danych ciąg znaków zostanie automatycznie przekonwertowany na wartość całkowitą 12345. W przypadku pobrania za pomocą instrukcji
SELECT
wartość zostanie zwrócona jako instancja typu danych liczbowych (np. Number), a nie jako instancja String.
Najlepszym sposobem uniknięcia niepożądanej konwersji danych jest przestrzeganie dwóch reguł. Po pierwsze: należy zdefiniować każdą kolumnę z powinowactwem, które jest zgodne z typem danych, jakie mają być zapisywane w tej kolumnie. Po drugie: należy wstawiać tylko wartości, których typ danych jest zgodny ze zdefiniowanym powinowactwem. Przestrzeganie tych zasad przynosi dwie korzyści. Wstawiane dane nie będą nieoczekiwanie konwertowane (co wiąże się z możliwością utraty znaczenia). Ponadto pobierane dane są zwracane w oryginalnym typie danych.
Więcej informacji o dostępnych typach powinowactwa kolumn i korzystaniu z typów danych w instrukcjach SQL zawiera sekcja
Obsługa typów danych
.