Характеристика | char(n) | varchar(n) | nvarchar(n) |
---|---|---|---|
Тип данных | Фиксированная длина | Переменная длина | Переменная длина (Unicode) |
Хранение | Всегда занимает n байт | Занимает только фактическую длину + 2 байта | Фактическая длина x2 + 2 байта |
Кодировка | Однобайтовая (ANSI) | Однобайтовая (ANSI) | Юникод (UTF-16) |
Макс. длина | 8000 символов | 8000 символов | 4000 символов |
Использование | Когда все значения одинаковой длины | Когда длина сильно варьируется | Многоязычные данные |
CREATE TABLE products (
product_code CHAR(10) -- Всегда 10 байт
);
CREATE TABLE customers (
customer_name VARCHAR(100) -- Занимает только фактическую длину + 2 байта
);
CREATE TABLE international (
greeting NVARCHAR(100) -- Может хранить кириллицу, иероглифы и т.д.
);
Скорость доступа:
Индексация:
Хранение:
Когда использовать CHAR:
-- Фиксированные форматы (коды, серийные номера)
CREATE TABLE serial_numbers (
serial_num CHAR(12) PRIMARY KEY
);
Когда использовать VARCHAR:
-- Текстовые данные переменной длины
CREATE TABLE user_comments (
comment_text VARCHAR(2000)
);
Когда использовать NVARCHAR:
-- Многоязычные данные
CREATE TABLE multilingual (
russian_text NVARCHAR(100),
chinese_text NVARCHAR(100)
);
DECLARE @char CHAR(10) = 'SQL' -- Занимает 10 байт
DECLARE @varchar VARCHAR(10) = 'SQL' -- Занимает 3 + 2 = 5 байт
DECLARE @nvarchar NVARCHAR(10) = N'SQL' -- Занимает 3*2 + 2 = 8 байт
Резюмируем: выбирайте CHAR для фиксированных данных, VARCHAR для текстов переменной длины в одной кодировке, и NVARCHAR для международной поддержки. Учитывайте требования к памяти и производительности при проектировании структуры базы данных.