40 / 100

VARCHAR

O'zgaruvchan uzunlikdagi belgilar turi

Kirish: Ushbu qo'llanmada siz PostgreSQL VARCHAR turi yordamida ma'lumotlar bazasida o'zgaruvchan uzunlikdagi matnli satrlarni saqlashni o'rganasiz.

PostgreSQL VARCHAR ma'lumot turiga kirish

CHARACTER VARYING yoki qisqacha VARCHAR turi ma'lumotlar bazasida o'zgaruvchan uzunlikdagi satrlarni saqlash imkonini beradi.

CHARACTER VARYING turini e'lon qilish sintaksisi quyidagicha:

query.sql
column_name CHARACTER VARYING (n)

Amaliyotda ko'pincha uning sinonimi bo'lgan VARCHAR qisqartmasi ishlatiladi:

query.sql
column_name VARCHAR(n)

Ushbu sintaksisda n parametri ustun saqlashi mumkin bo'lgan maksimal belgilar sonini belgilaydi. n musbat butun son bo'lib, uning qiymati 10,485,760 dan oshmasligi kerak.

Agar siz ustunga n tadan ko'p belgi kiritishga yoki yangilashga urinsangiz, PostgreSQL xatolik chiqaradi.

Ma'lumotlar bazasida satr uzunligini cheklashning ikkita asosiy sababi bor:

  • Birinchidan, ma'lumotlar bazasi darajasida cheklov (validation) o'rnatib, kutilmagan uzunlikdagi noto'g'ri ma'lumotlar kiritilishining oldini olasiz.
  • Ikkinchidan, ilova foydalanuvchi interfeysi (UI) haddan tashqari uzun matnlar tufayli buzilib ketishidan himoyalanasiz.

CHAR ustunidan farqli o'laroq, VARCHAR ustuniga n dan kamroq belgiga ega matn kiritilsa, PostgreSQL uning oxiriga sun'iy bo'shliqlar (probellar) qo'shmaydi.

Agar uzunligi cheklanmagan matn saqlamoqchi bo'lsangiz, uzunlik ko'rsatkichini tushirib qoldirishingiz mumkin:

query.sql
column_name VARCHAR

Bunday holda, ustun istalgan uzunlikdagi matnni qabul qila oladi.

PostgreSQL VARCHAR turiga misol

Birinchidan, products jadvalini yaratamiz:

query.sql
CREATE TABLE products (
  id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  description VARCHAR
);

products jadvalida ikkita VARCHAR ustuni mavjud:

  • name ustuni maksimal 50 ta belgini saqlashi mumkin. 50 tadan ortiq belgi kiritilsa, xatolik yuz beradi.
  • description ustunida uzunlik ko'rsatilmagan, shuning uchun u istalgan uzunlikdagi tavsif matnini saqlay oladi.

Ikkinchidan, products jadvaliga qatorlar qo'shamiz:

query.sql
INSERT INTO
  products (name, description)
VALUES
  (
    'Galaxy S21',
    'Yuqori darajadagi smartfon: 6.2 dyuymli ekran, uchlik kamera va 5G aloqa.'
  ),
  (
    'iPhone 16',
    'Apple flagmani: 6.1 dyuymli Super Retina XDR displey va A18 Bionic protsessor.'
  ) RETURNING *;

Natija:

matn
id |    name    |                                              description
----+------------+-----------------------------------------------------------------------------------------
  1 | Galaxy S21 | Yuqori darajadagi smartfon: 6.2 dyuymli ekran, uchlik kamera va 5G aloqa.
  2 | iPhone 16  | Apple flagmani: 6.1 dyuymli Super Retina XDR displey va A18 Bionic protsessor.

Uchinchidan, nomi 50 belgidan uzun bo'lgan mahsulotni kiritib ko'ramiz:

query.sql
INSERT INTO products(name)
VALUES('Ultra-High Definition Quantum Dot Curved Smart TV 90-Inch');

PostgreSQL quyidagi xatolikni chiqaradi:

matn
ERROR: value too long for type character varying(50)

Xulosa

  • O'zgaruvchan uzunlikdagi matnlarni saqlash uchun VARCHAR(n) turidan foydalaning.
  • Belgilar sonini cheklamasdan matn saqlash uchun uzunlik ko'rsatkichisiz shunchaki VARCHAR deb yozing.