Char và varchar khác nhau như thế nào

Mục lụcNvarchar là gì?Sự khác nhau giữa varchar và nvarchar chỉ ra cách dữ liệu được lưu trữ trong cơ sở dữ liệu. Một hệ thống cơ sở dữ liệu bao gồm dữ liệu và dữ liệu được định nghĩa bởi các kiểu dữ liệu. Một kiểu dữ liệu cho biết loại giá trị mà một cột có thể chứa. Mỗi cột trong một bảng cơ sở dữ liệu phải có một tên và một kiểu dữ liệu. Ngày nay, có rất nhiều loại dữ liệu có sẵn trong thiết kế cơ sở dữ liệu. Trong số các kiểu dữ liệu này, varchar và nvarchar được sử dụng để lưu trữ các ký tự chuỗi. Varchar và Nvarchar dường như có thể hoán đổi cho nhau. Nhưng hai loại này có lợi thế khác nhau, và chúng được sử dụng cho các mục đích khác nhau.

Varchar là gì?

Như tên cho thấy, varchar là ký tự khác hoặc thay đổi char. Cú pháp của varchar là VARCHAR [(n | max)]. Varchar lưu trữ dữ liệu ASCII là dữ liệu không phải là Unicode, và đó là loại dữ liệu được sử dụng trong việc sử dụng thông thường. Varchar sử dụng một byte cho mỗi ký tự. Nó cũng lưu trữ chiều dài của mỗi chuỗi trong cơ sở dữ liệu. Varchar có chiều dài dữ liệu biến đổi và có thể lưu trữ tối đa 8000 ký tự không phải là Unicode. Loại dữ liệu này rất linh hoạt và sẽ chấp nhận hầu hết các loại dữ liệu khác nhau. Varchar không cho phép bạn lưu trữ các ký tự trống cho các phần không sử dụng của chuỗi. Kích thước lưu trữ tối đa của varchar là 2 GB và dung lượng lưu trữ thực của dữ liệu là chiều dài thực tế của dữ liệu cộng với hai byte. Mặc dù varchar chậm hơn char, nó sử dụng phân bổ bộ nhớ động. Không chỉ các chuỗi mà còn các kiểu không phải chuỗi như kiểu ngày, “14 tháng 2”, “12/11/2014” cũng có thể được lưu trữ trong kiểu dữ liệu varchar.

Char và varchar khác nhau như thế nào

Nvarchar là gì?

Nvarchar gợi ý nhân vật khác nhau hoặc quốc gia khác nhau. Cú pháp của nvarchar là NVARCHAR [(n | max)]. Nvarchar có thể lưu trữ các loại dữ liệu khác nhau với chiều dài khác nhau. Chúng là dữ liệu Unicode và dữ liệu và ngôn ngữ đa ngôn ngữ với các ký tự giống như byte kép ở Trung Quốc. Nvarchar sử dụng 2 byte cho mỗi ký tự, và nó có thể lưu trữ giới hạn tối đa 4000 ký tự và chiều dài tối đa là 2 GB. Nvarchar xử lý chuỗi như là chuỗi rỗng và không có ký tự. Kích thước lưu trữ gấp đôi số ký tự kích thước cộng với hai byte. Trong nvarchar, các khoảng trống sau không bị xóa khi giá trị được lưu trữ và nhận.

Sự khác biệt giữa Varchar và Nvarchar là gì?

Sự khác biệt chính giữa varchar và nvarchar chỉ ra cách dữ liệu được lưu trữ trong cơ sở dữ liệu.

• Varchar lưu trữ các giá trị ASCII và nvarchar lưu các ký tự Unicode.

• Varchar sử dụng một byte cho mỗi ký tự trong khi nvarchar sử dụng hai byte cho mỗi ký tự.

• Varchar [(n)] chứa các ký tự không phải là ký tự Unicode với độ dài thay đổi và Nvarchar [(n)] lưu trữ các ký tự Unicode với chiều dài thay đổi.

• Varchar có thể lưu trữ tối đa 8000 ký tự không phải Unicode và nvarchar lưu trữ tối đa 4000 ký tự Unicode hoặc không phải Unicode.

Varchar là tốt hơn để sử dụng ở những nơi có biến với các ký tự không phải là ký tự Unicode. Nvarchar được sử dụng ở những nơi có nhiều ký tự Unicode khác nhau.

• Kích thước lưu trữ của varchar là số byte bằng với số ký tự cộng với hai byte được dành riêng cho bù đắp. Nvarchar sử dụng số byte bằng với hai lần số ký tự cộng với hai byte được dành riêng cho bù đắp.

• Tất cả các hệ điều hành hiện đại và các nền tảng phát triển sử dụng Unicode nội bộ. Vì vậy, nvarchar được sử dụng rất nhiều thay vì varchar để tránh chuyển đổi các kiểu dữ liệu.

Tóm tắt:

Nvarchar vs Varchar

Varchar và nvarchar là các loại dữ liệu có chiều dài thay đổi mà chúng ta sử dụng để lưu trữ các loại dây khác nhau. Những kiểu dữ liệu này hữu ích trong các hệ điều hành hiện đại. Những kiểu dữ liệu này tránh chuyển đổi dữ liệu từ loại này sang loại khác theo hệ điều hành. Vì vậy, varchar và nvarchar giúp lập trình để xác định chuỗi Unicode và không Unicode mà không gặp khó khăn nhiều. Hai loại dữ liệu này rất hữu ích trong lập trình.

Char và varchar khác nhau như thế nào

About The Author

Các kiểu dữ liệu SQL xác định loại giá trị có thể được lưu trữ trong một cột trong bảng. Ví dụ: nếu chúng ta muốn một cột chỉ lưu trữ các giá trị nguyên, thì chúng ta có thể định nghĩa nó kiểu dữ liệu là int.

Đối với QA chúng ta, việc nắm bắt và hiểu được các kiểu dữ liệu giúp chúng ta xác định các data test phù hợp và tạo các trường hợp kiểm thử Normal/Abnormal đầy đủ và chính xác hơn.

1. Kiểu dữ liệu số (Numeric Data Types)

1.1 Kiểu dữ liệu số nguyên

Các kiểu số nguyên tiêu chuẩn của MySQL là INTEGER (or INT) và SMALLINT. Ngoài ra, MySQL cũng hỗ trợ các kiểu số nguyên khác như TINYINT, MEDIUMINT, và BIGINT. Mỗi kiểu dữ liệu có không gian lưu trữ khác nhau.

  • TINYINT
    • Độ dài (số byte): 1
    • Giá trị lưu trữ (có dấu): -128 - 127
    • Giá trị lưu trữ (không dấu): 0 - 255
  • SMALLINT
    • Độ dài (số byte): 2
    • Giá trị lưu trữ (có dấu): -32768 - 32767
    • Giá trị lưu trữ (không dấu): 0 - 65535
  • MEDIUMINT
    • Độ dài (số byte): 3
    • Giá trị lưu trữ (có dấu): -8388608 - 8388607
    • Giá trị lưu trữ (không dấu): 0 - 16777215
  • INT
    • Độ dài (số byte): 4
    • Giá trị lưu trữ (có dấu): -2147483648 - 2147483647
    • Giá trị lưu trữ (không dấu): 0 - 4294967295
  • BIGINT
    • Độ dài (số byte): 8
    • Giá trị lưu trữ (có dấu): -9223372036854775808 - 92233720368 54775807
    • Giá trị lưu trữ (không dấu): 0 - 184467440737 09551615

1.2 Kiểu dữ liệu số thực

Kiểu dữ liệu FLOAT và DOUBLE mô tả gần đúng các giá trị số thực. MySQL sử dụng 4 byte để lưu trữ dữ liệu FLOAT và 8 byte dành cho kiểu dữ liệu DOUBLE.

  • FLOAT(M,D)

    • (M) là độ dài phần nguyên
    • (D) là độ dài phần thập phân
    • Độ dài (số byte): 4
    • Giá trị lưu trữ (có dấu): -3.402823466E+38 - -1.175494351E-38
    • Giá trị lưu trữ (không dấu): 1.175494351E-38 - 3.402823466E+38
  • DOUBLE(M,D)

    • (M) là độ dài phần nguyên
    • (D) là độ dài phần thập phân
    • Độ dài (số byte): 8
    • Giá trị lưu trữ (có dấu): -1.7976931348623157E+ 308 - -2.2250738585072014E- 308
    • Giá trị lưu trữ (không dấu): 0 and 2.2250738585072014E- 308 - 1.7976931348623157E+ 308

1.3 Kiểu dữ liệu DECIMAL và NUMERIC

Trong MySQL kiểu DECIMAL và NUMERIC lưu trữ chính xác các dữ liệu số, định dạng nhị phân. Kiểu dữ liệu này thường được áp dụng với dữ liệu tiền tệ, đơn giá.

Ví dụ: Decimal (5,2): Nghĩa là nó có thể lưu trữ một giá trị có 5 chữ số trong đó có 2 số thập phân

2. Kiểu dữ liệu Date and Time

Các kiểu dữ liệu ngày tháng và thời gian thường bao gồm DATE, TIME, DATETIME, TIMESTAMP và YEAR.

2.1 Kiểu dữ liệu DATE

Sử dụng khi bạn muốn lưu trữ chỉ thông tin ngày tháng.

  • Định dạng hiển thị: YYYY-MM-DD
  • Phạm vi thời gian: '1000-01-01 00:00:00' to '9999-12-31'

2.2 Kiểu dữ liệu DATETIME

Sử dụng khi bạn cần giá trị lưu trữ cả hai thông tin ngày tháng và thời gian.

  • Định dạng hiển thị: YYYY-MM-DD HH:MM:SS
  • Phạm vi thời gian: '1000-01-01 00:00:00' to '9999-12-31 23:59:59'

2.3 Kiểu dữ liệu TIMESTAMP

Sử dụng khi bạn cần giá trị lưu trữ thời gian.

  • Định dạng hiển thị: HH:MM:SS
  • Phạm vi thời gian: '-838:59:59' to '838:59:59'

Lưu ý: Phần thời gian có thể lớn bởi vì kiểu TIME có thể không chỉ mô tả thời gian của một ngày (Vốn chỉ có tối đa 24 giờ), mà nó có thể là thời gian trôi qua hoặc khoảng thời gian giữa hai sự kiện (Cái mà có thể lớn hơn 24h thậm trí có giá trị âm).

Sự khác biệt chính của DATETIMETIMESTAMP là giá trị của TIMESTAMP được chuyển đổi từ múi giờ hiện tại sang UTC trong khi lưu trữ, và chuyển ngược trở lại từ UTC sang múi giờ hiện tại trong lúc lấy ra. Còn kiểu dữ liệu DATETIME thì không có gì thay đổi.

2.4 Kiểu dữ liệu YEAR

Kiểu dữ liệu YEAR được sử dụng 1-byte để mô tả giá trị.

  • YEAR(2)

    • Chỉ định rõ chiều rộng hiển thị là 2 ký tự
    • Định dạng hiển thị: Hiển thị 2 số cuối của năm
    • Phạm vi: '0' to '99'
  • YEAR(4)

    • Chỉ định rõ chiều rộng hiển thị là 4 ký tự. Nếu không chỉ rõ chiều rộng mặc định là 4 ký tự
    • Định dạng hiển thị: YYYY
    • Phạm vi: '1901' to '2155'

3. Kiểu chuỗi (String Types)

Các kiểu dữ liệu String bao gồm:

  • CHAR
  • VARCHAR
  • BINARY
  • VARBINARY
  • BLOB
  • TEXT
  • ENUM
  • SET

3.1 Kiểu dữ liệu CHAR và VARCHAR

Kiểu dữ liệu CHAR và VARCHAR là giống nhau, nhưng khác nhau ở cách chúng được lưu trữ và truy xuất. Chúng cũng khác nhau về chiều dài tối đa và giữ lại hay không khoảng trắng phía trước (gọi là trailing spaces).

  • CHAR

    • Định dạng hiển thị: Khoảng trắng phía trước (Trailing spaces) được loại bỏ
    • Phạm vi các ký tự: '0' to '255'
  • VARCHAR

    • Định dạng hiển thị: Giống như data được nhập và lưu trữ
    • Phạm vi các ký tự: '0' to '65535'

3.2 Kiểu dữ liệu BINARY và VARBINARY

Các kiểu dữ liệu BINARY và VARBINARY tương tự như CHAR và VARCHAR, ngoại trừ việc chúng có chứa các chuỗi nhị phân chứ không phải là chuỗi non-binary.

  • BINARY

    • Định dạng hiển thị: Chứa các chuỗi nhị phân (Binary Strings)
    • Phạm vi các ký tự: '0' to '255'
  • VARBINARY

    • Định dạng hiển thị: Chứa các chuỗi nhị phân (Binary Strings)
    • Phạm vi các ký tự: '0' to '65535'

3.3 Kiểu dữ liệu BLOB và TEXT

BLOB

Là một đối tượng nhị phân lớn (Binary Large OBject) có thể chứa một lượng lớn dữ liệu. Có 4 loại BLOB:

  • TINYBLOB (Chiều dài tối đa là 255 ký tự)
  • BLOB
  • MEDIUMBLOB (Chiều dài tối đa là 16777215 ký tự)
  • LONGBLOB (Chiều dài tối đa là 4294967295 ký tự)

TEXT

Lưu trữ giá trị được coi như một chuỗi các ký tự có mã hóa (character set). Có 4 loại TEXT tương ứng với bốn loại BLOB:

  • TINYTEXT (Chiều dài tối đa là 255 ký tự)
  • TEXT
  • MEDIUMTEXT (Chiều dài tối đa là 16777215 ký tự)
  • LONGTEXT (Chiều dài tối đa là 4294967295 ký tự)

3.4 Kiểu dữ liệu ENUM

Khi định nghĩa một trường kiểu này, tức là, ta đã chỉ ra một danh sách các đối tượng mà trường phải nhận (có thể là Null).

Ví dụ, nếu ta muốn một trường nào đó chỉ nhận một trong các giá trị "A" hoặc "B" hoặc "C" thì ta phải định nghĩa kiểu ENUM cho nó như sau: ENUM ('A', 'B', 'C'). Và chỉ có các giá trị này (hoặc NULL) có thể xuất hiện trong trường đó.

Tổng hợp từ các nguồn: https://shareprogramming.net/sql-datatypes-cac-kieu-du-lieu-trong-sql/ https://nentang.vn/app/edu/khoa-hoc/co-so-du-lieu/co-so-du-lieu-mysql/lessons/cac-kieu-du-lieu-trong-mysql