CodeGym /Kurslar /SQL SELF /Mətn tipli verilənlər: CHAR, VARCHAR...

Mətn tipli verilənlər: CHAR, VARCHAR, TEXT

SQL SELF
Səviyyə , Dərs
Mövcuddur

PostgreSQL-də mətnlə işləyəndə əsas 3 qəhrəmanımız var: CHAR, VARCHARTEXT. Bunların hərəsinin öz özəllikləri, üstünlükləri və incəlikləri var. Gəlin bir-bir baxaq.

CHAR(n)

CHAR, yəni character, sabit uzunluqlu n simvolluq sətirdir. Əgər daxil etdiyin sətir daha qısa olsa, avtomatik olaraq boşluqlarla tamamlanacaq.

Nümunə:

id kod - CHAR(5)
1 ''ABC''

Bu tip o zaman rahatdır ki, bütün sətirlər eyni uzunluqda olmalıdır (məsələn, kodlar, barkodlar və ya sabit uzunluqlu identifikatorlar).

Amma dəyişkən uzunluqlu mətnlə işləyəndə əlavə boşluqlar sadəcə bazada yer tutur.

VARCHAR(n)

VARCHAR, yəni variable character, maksimum n simvola qədər dəyişkən uzunluqlu sətirləri saxlamaq üçündür.

Nümunə:

id istifadəçi adı - VARCHAR(10)
1 ''Alice''

Bu tip yaddaşı effektiv istifadə edir, çünki yalnız real mətni saxlayır. Amma çatışmazlığı odur ki, uzunluq limiti göstərməlisən. Əgər sətir limiti aşarsa, baza error atacaq.

TEXT

TEXT — uzunluq limiti olmayan mətn tipidir. Əgər mətnin nə qədər böyüyəcəyini bilmirsənsə, bu tip çox istifadə olunur.

Nümunə:

id məzmun - TEXT
1 ''Bu çox uzun bir mətn parçasıdır. Limit yoxdur!''

Üstünlüklər: istənilən uzunluqda mətn saxlaya bilərsən, limit barədə düşünməyə ehtiyac yoxdur.

Çatışmazlıqlar: limit olmadığı üçün mətnlər "şişib" bazanı doldura bilər.

Mətn tiplərinin müqayisəsi

Mətnlə işləyəndə hansı tipin hansı vəziyyətə uyğun olduğunu başa düşmək vacibdir. Budur CHAR, VARCHARTEXT arasındakı əsas fərqlər:

Verilənlər tipi Uzunluq Performans Nə vaxt istifadə etməli?
CHAR(n) Sabit Sabit uzunluqlu sətirlər üçün daha sürətlidir Sabit uzunluqlu kodlar üçün (məsələn, ISO)
VARCHAR(n) Maksimum uzunluq n Uzunluq limiti varsa, TEXT-dən sürətlidir Maksimumu məlum olan dəyişkən uzunluqlu sətirlər üçün
TEXT Limitsiz Ən universal Uzunluğu əvvəlcədən bilinməyən böyük mətnlər üçün

Praktik istifadə nümunələri

Gəlin baxaq, bu tipləri real vəziyyətlərdə necə istifadə etmək olar.

Nümunə 1: Sabit uzunluqlu kodlar üçün CHAR istifadə etmək

Təsəvvür et, bir bazada şəhər kodlarını ISO 3166-1 alpha-3 standartına görə saxlamaq lazımdır. Hər kod dəqiq 3 simvol olmalıdır.

city_id city_name - VARCHAR(50) iso_code - CHAR(3)
1 New York NYC
2 Los Angeles LAX
3 Chicago CHI

Burada CHAR(3) idealdır, çünki hər şəhərin ISO kodu sabit uzunluqludur.

Nümunə 2: İstifadəçi adları üçün VARCHAR istifadə etmək

İstifadəçi adı üçün VARCHAR əla seçimdir. Adlar adətən dəyişkən uzunluqlu olur, amma 50 simvolu keçməyəcəyini təxmin edə bilərik.

user_id istifadəçi adı - VARCHAR(50) email - VARCHAR(50)
1 Alice alice@example.com
2 Bob bob@example.net

Bu halda VARCHAR yaddaşa qənaət edir, çünki real sətir uzunluğu 50-dən az ola bilər.

Nümunə 3: Təsvirləri saxlamaq üçün TEXT istifadə etmək

Təsəvvür et, bir bloqun var və hər post üçün böyük mətn təsviri saxlamaq lazımdır. Burada ən yaxşı seçim TEXT-dir.

post_id başlıq - VARCHAR(100) məzmun - TEXT
1 Post 1 Bu çox uzun bir blog post məzmunudur və davam edir...

Əgər mətnin uzunluğunu əvvəlcədən bilmirsənsə, TEXT tam yerinə düşür.

4. Əlavə incəliklər və tələlər

Mətn tipləri ilə işləyəndə bəzi məqamlar var ki, səhvlərdən qaçmaq üçün onları nəzərə almaq lazımdır.

Problem: CHAR boşluq əlavə edir

Əgər CHAR tipli sahədəki sətirləri əlavə boşluqları nəzərə almadan müqayisə etsən, gözlənilməz nəticələr ala bilərsən.

SELECT * FROM cities WHERE iso_code = 'NYC';
-- Heç nə qaytarmayacaq, əgər boşluqları silməsən

Necə düzəltmək olar: Boşluqları silmək üçün TRIM() funksiyasından istifadə et.

SELECT * FROM cities WHERE TRIM(iso_code) = 'NYC';

Problem: VARCHAR-da uzunluq limiti error verə bilər

Əgər VARCHAR tipli sahəyə limiti aşan sətir yazmağa çalışsan, baza error atacaq.

INSERT INTO users (username, email) VALUES ('A_username_that_is_too_long_for_field', 'test@example.com');
-- Error

Necə düzəltmək olar: Uzunluq limiti (n) real ehtiyaclara uyğun olmalıdır. Yaxud limit istəmirsənsə, TEXT istifadə et.

Problem: TEXT bazanı "şişirdə" bilər

TEXT limitsiz məlumat saxlayır, bu da cədvəllərin həddindən artıq böyüməsinə və indeksləşdirmənin çətinləşməsinə səbəb ola bilər.

Necə qaçmaq olar: Əgər TEXT tipli sütunu aktiv indeksləmək fikrin varsa, limitli VARCHAR istifadə etməyi düşün.

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Registrin dəyişdirilməsi və boşluqların silinməsi
Registrin dəyişdirilməsi və boşluqların silinməsi
2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
Şablona görə filtrasiya (LIKE)
Şablona görə filtrasiya (LIKE)
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION