Bosh sahifa Wiki Common data type

Common data type

Common data type — bir expression yoki query natijasida turli manbalardan kelgan qiymatlarni yagona tipda ifodalash uchun database yoki dasturlash muhiti tanlaydigan umumiy tur. SQLda bu tushuncha set operatsiyalari, CASE, COALESCE, arithmetic ifodalar va qiymatlar ro‘yxatida muhim.

Tipni aniqlash

UNIONning tegishli ustunlari bitta natija ustuniga aylanishi kerak. Database integer va decimal uchun decimalni, qisqa va uzun matn uchun kengroq matn turini tanlashi mumkin. Umuman mos kelmaydigan turlar xato beradi yoki mahsulot qoidasiga ko‘ra implicit conversion bajariladi.

SELECT CAST(amount AS DECIMAL(18,2)) AS value
UNION ALL
SELECT refund_amount FROM refunds;

Aniq CAST niyatni hujjatlashtiradi va providerga xos inference o‘zgarishidan himoya qiladi. Birinchi branchdagi untyped NULL yoki string literal ko‘pincha kontekstdan tip oladi; kontekst yetarli bo‘lmasa cast talab qilinadi.

Raqamli turlar

Integer turlari diapazoni, decimal precision va scale hamda floating-point xususiyatlari farq qiladi. INTEGER bilan BIGINT birlashsa kengroq diapazon tanlanishi tabiiy. DECIMAL(10,2) va DECIMAL(18,4) uchun natija precision/scale formulasi database mahsulotiga bog‘liq.

Floating-pointni pul decimali bilan aralashtirish aniq kasrlarni taxminiy binary qiymatga o‘tkazishi mumkin. Bu summada kichik farqlar beradi. Moliyaviy hisobda barcha branchlar aniq decimal tipga keltiriladi va overflow chegarasi test qilinadi.

Matn, collation va uzunlik

VARCHAR ustunlarining encoding, collation va maksimal uzunligi common type tanloviga ta’sir qiladi. Ikki turli collationni bitta comparison kontekstiga keltirish xato yoki majburiy collation tanlashni talab qilishi mumkin. Natija tipi juda qisqa tanlansa truncation, juda keng tanlansa xotira va index xarajati ortadi.

Binary va character satrlar bir xil emas. Byte sequence’ni matn deb cast qilish encoding xatosi yoki ma’lumot buzilishiga olib kelishi mumkin. UUIDni turli branchlarda native UUID va matn sifatida saqlash o‘rniga schema bir xillashtiriladi.

Sana va vaqt

DATE, TIME, TIMESTAMP va timezone-aware timestamp turlari boshqa ma’nolarga ega. Date timestampga aylantirilsa vaqt odatda tun boshlanishi sifatida to‘ldiriladi. Timezone’siz timestampni timezone’li turga o‘tkazishda qaysi zona qabul qilinishi muhit sozlamasiga bog‘liq bo‘lishi mumkin.

Integratsiyada barcha vaqtlar uchun canonical format va timezone siyosati belgilanadi. Daylight saving o‘zgarishi mavjud zonalarda lokal vaqt ambiguous yoki mavjud bo‘lmagan holatga tushishi mumkin.

CASE va COALESCE

CASE branchlari ham bitta output tipga kelishi kerak. Bir branch integer, boshqasi matn qaytarsa database yoki conversion xatosi beradi, yoki barcha qiymatni matnga aylantiradi. COALESCE birinchi non-null qiymatni qaytaradi, ammo uning tipi “birinchi runtime qiymat”dan emas, expressionlar uchun oldindan topilgan umumiy turdan keladi.

Implicit conversion index ustuniga qo‘llansa index access cheklanishi mumkin. Query planda cast qaysi tomonga qo‘yilgani tekshiriladi. Common data type faqat sintaksis masalasi emas: aniqlik, sort semantikasi, client driver mapping va backward compatibilityni belgilaydi.

Client bilan moslik

Natija tipi driver orqali dasturlash tilidagi turga map qilinadi. Database BIGINTini JavaScript numberga bevosita o‘tkazish katta qiymatlarda aniqlikni yo‘qotishi mumkin; decimal ham binary floatga aylanmasligi kerak. API serialization common type diapazoni va null holatini saqlaydi. Migrationda ustunni kengaytirish database uchun xavfsiz ko‘rinsa ham, eski client yangi qiymatni qabul qila olmasligi mumkin. Contract testi minimal, maksimal va overflow qiymatlarini qamraydi.

Bog‘liq tushunchalar

Data type, Type coercion, CAST, UNION, CASE expression, COALESCE, Collation, Numeric precision