Bài viết Learn & More

Bài 4: Các Kiểu Dữ Liệu (Data Types) phổ biến nhất trong SQL Server

Bài viết này thuộc SQL ServerCơ bản.

Khi bạn tạo bảng (Table) ở bài trước, bạn đã thấy những từ khóa như INT, NVARCHAR, DATETIME đi kèm sau tên cột. Tại sao không chỉ dùng một kiểu "Văn bản" cho tất cả mọi thứ? Lý do là: Hiệu năng và Kiểm soát lỗi. Nếu bạn khai báo cột "Tuổi" là kiểu số INT, SQL Server sẽ tự động chặn việc người dùng nhập chữ "Mười lăm" vào đó. Đồng thời, số INT tốn ít dung lượng ổ cứng để lưu trữ hơn là văn bản. Bài này chúng ta sẽ phân loại và chọn đúng kiểu dữ liệu (Data Type) cho từng trường hợp cụ thể.

Bài 4: Các Kiểu Dữ Liệu (Data Types) phổ biến nhất trong SQL Server

Khi bạn tạo bảng (Table) ở bài trước, bạn đã thấy những từ khóa như INT, NVARCHAR, DATETIME đi kèm sau tên cột. Tại sao không chỉ dùng một kiểu "Văn bản" cho tất cả mọi thứ?

 

Lý do là: Hiệu năng và Kiểm soát lỗi. Nếu bạn khai báo cột "Tuổi" là kiểu số INT, SQL Server sẽ tự động chặn việc người dùng nhập chữ "Mười lăm" vào đó. Đồng thời, số INT tốn ít dung lượng ổ cứng để lưu trữ hơn là văn bản.

Bài này chúng ta sẽ phân loại và chọn đúng kiểu dữ liệu (Data Type) cho từng trường hợp cụ thể.

 

1. Nhóm dữ liệu Số (Numeric Types)

Dùng để lưu số lượng, ID, giá tiền... có thể cộng trừ nhân chia được.

 

- INT (Integer): Số nguyên (không có phần thập phân). Phổ biến nhất. Dùng làm ID, Số lượng sản phẩm (StockQuantity).

  Mẹo: Nếu dữ liệu rất nhỏ (như Trạng thái 0, 1) dùng TINYINT (0-255) để tiết kiệm Ram.

- DECIMAL(p, s) / NUMERIC: Số thập phân có độ chính xác tuyệt đối. Bắt buộc dùng cho Tiền tệ.

  Ví dụ: DECIMAL(18, 2) nghĩa là tổng cộng có 18 chữ số, trong đó có 2 chữ số sau dấu phẩy. Ở bảng Products của chúng ta, Price DECIMAL(18, 2) giúp lưu giá trị như 15000.50.

- FLOAT: Số thập phân có độ chính xác tương đối (khoa học).

  Cạm bẫy: KHÔNG bao giờ dùng FLOAT để lưu tiền tệ vì nó làm tròn xấp xỉ, dẫn đến lệch tiền khi cộng dồn hàng triệu đơn hàng.

 

2. Nhóm dữ liệu Chuỗi (String Types)

Nhóm này làm rất nhiều bạn mới nhầm lẫn giữa VARCHAR và NVARCHAR.

 

- VARCHAR(n): Lưu chuỗi văn bản không có dấu tiếng Việt (Non-Unicode).

  Ví dụ: Email (VARCHAR(100)), Số điện thoại (VARCHAR(20)), Mã code (VARCHAR(50)).

- NVARCHAR(n): Chữ N đứng đầu đại diện cho National - Lưu chuỗi văn bản có dấu Tiếng Việt (Unicode). Nó tốn gấp đôi dung lượng ổ cứng so với VARCHAR.

  Ví dụ: Họ Tên (NVARCHAR(100)), Địa chỉ, Tên sản phẩm.

- VARCHAR(MAX) / NVARCHAR(MAX): Dùng khi bạn muốn lưu một đoạn văn rất dài (như bài viết blog, review sản phẩm). Sức chứa lên tới 2GB.

 

Cạm bẫy: Nếu bạn khai báo FullName VARCHAR(50) và insert chữ "Nguyễn Văn A", kết quả lưu trong DB sẽ bị lỗi font thành "Nguy?n V?n A". Luôn nhớ dùng NVARCHAR cho tiếng Việt nhé!

 

3. Nhóm dữ liệu Thời gian (Date and Time Types)

 

- DATE: Chỉ lưu ngày tháng năm (YYYY-MM-DD).

  Ví dụ: Ngày sinh (BirthDate).

- DATETIME: Lưu ngày tháng năm và cả giờ phút giây.

  Ví dụ: Thời điểm đặt hàng (OrderDate), Thời điểm tạo tài khoản (CreatedAt).

- TIME: Chỉ lưu giờ phút giây.

 

4. Nhóm dữ liệu đặc biệt khác

- BIT: Chỉ lưu giá trị 0 hoặc 1 (tương đương False/True).

  Ví dụ: Cột IsActive (Đang hoạt động hay bị khóa?), IsPaid (Đã thanh toán chưa?).

- UNIQUEIDENTIFIER (GUID): Một chuỗi định danh ngẫu nhiên cực dài, đảm bảo không bao giờ trùng nhau trên toàn thế giới (Ví dụ: 6F9619FF-8B86-D011-B42D-00C04FC964FF). Hay dùng làm Khóa chính (Primary Key) trong các hệ thống phân tán lớn thay cho ID tự tăng.

 

Thực hành

Nhìn lại Script tạo bảng Products ở Bài 0:

```sql

CREATE TABLE Products (

    ProductID INT IDENTITY(1,1) PRIMARY KEY,

    ProductName NVARCHAR(100) NOT NULL,

    Category NVARCHAR(50),

    Price DECIMAL(18, 2) NOT NULL,

    StockQuantity INT DEFAULT 0

);

```

Bạn hãy thử giải thích tại sao ProductName lại dùng NVARCHAR(100) mà không phải VARCHAR(100)? Tại sao Price dùng DECIMAL?

 

Tổng kết (Key Takeaways)

- Quy tắc vàng: Dữ liệu kiểu gì thì khai báo đúng kiểu đó. Đừng dùng VARCHAR để lưu Tuổi hay Giá tiền.

- Liên quan đến Tiền: Luôn dùng DECIMAL.

- Liên quan đến Tiếng Việt: Luôn dùng NVARCHAR.

 

Điều hướng (Next Steps)

Cấu trúc xong, kiểu dữ liệu xong. Giờ là lúc chúng ta đổ dữ liệu (đồ đạc) vào trong các cái tủ này. Chuyển sang [Bài 5: Thao tác với dữ liệu (DML): INSERT, UPDATE, DELETE].

Đọc tiếp

SQL Server Cơ bản

Bài 5: Thao tác với dữ liệu (DML): INSERT, UPDATE, DELETE

Nội dung liên quan

Thêm bài viết trong danh mục này