SQL Server – Các kiểu dữ liệu trong SQL Server – https://final-blade.com

Để thao tác với CSDL một cách tốt nhất. Trước hết tất cả chúng ta cần nắm rõ được những thành phần nhỏ nhất. Chúng chính là những kiểu tài liệu trong T-SQL .

Exact numerics

Số nguyên ( integer ) – bigint, int, smallint và tinyint

Các kiểu tài liệu này dùng để tàng trữ những giá trị sô nguyên. Tuy nhiên, chúng có một số ít đặc thù khác nhau ( theo miêu tả ở bảng so sánh bên đưới ). Do đó, khi phong cách thiết kế CSDL, tất cả chúng ta cần phải vận dụng thực tiễn vào để chọn kiểu tài liệu tương thích nhất .
Ví dụ : tất cả chúng ta có một bảng tài liệu lưu thông tin. Đối tượng là con người. Có thuộc tính lưu tuổi. Áp dụng trong thực tiễn, tất cả chúng ta thấy được, gần như là không có 1 con người nào có số tuổi lớn hơn 255. Do đó, tất cả chúng ta chỉ cần kiểu tài liệu tinyint là quá đủ trong trường hợp này .

Kiểu dữ liệu Khoảng giá trị Kích thước
bigint $-9,223,372,036,854,775,808 \rightarrow 9,223,372,036,854,775,807$

($-2^{63} \rightarrow 2^{63}$

8 bytes
int $-2,147,483,648 \rightarrow 2,147,483,647$
( USD – 2 ^ { 31 } \ rightarrow 2 ^ { 31 } $ )
4bytes
smallint $-32,768 \rightarrow 32,767$
( USD – 2 ^ { 15 } \ rightarrow 2 ^ { 15 } $ )
2 bytes
tinyint $0 \rightarrow 255$ 1 byte

Dữ liệu số ( numeric data type ) – decimal và numeric

Dữ liệu số, dùng để tàng trữ số thực. Tuy nhiên size phần nguyên và phần thập phân được cố định và thắt chặt .
Ví dụ : Chúng ta có một bảng tài liệu lưu điểm số của những bạn học viên. Điểm số lưu ở thông số 10, làm tròn 2 chữ số thập phân. Nghĩa là tất cả chúng ta chỉ cần lưu điểm như : 5 ; 7.5 ; 9.25 .. vv Trong những trường hợp này, tất cả chúng ta hoàn toàn có thể sử dụng tài liệu kiểu số .

  • Cú pháp: decimal[(p, [,s])] và numeric[p, [,s]] (decimal và numeric có thể dùng thay thế cho nhau).
  • Tham số p (precision): Tổng chữ số dùng để lưu trữ giá trị (gồm cả phần nguyên và phần thập phân).Giá trị của p sẽ nằm trong đoạn [1, 38] và nó nhận 18 làm giá trị mặc định
  • Tham số s (scale): Số chữ số lưu phần thập phân. Giá trị của tham số này nằm trong đoạn [0, p]. Nghĩa là $0 \leq s \leq p$. Giá trị mặc định của nó là 0

Theo ví dụ trên, tất cả chúng ta có điểm 1 học viên hoàn toàn có thể từ $ 0.00 \ rightarrow 10.00 $ vậy tài liệu hoàn toàn có thể có nhiều nhất 4 chữ số và cần 2 chữ số cho phần thập phân. Lúc này, tất cả chúng ta thử nghiệm 1 đoạn truy vấn nhỏ để hiểu rõ .

123456

DECLARE@numdecimal(4,2)

SET@num=9.959

SELECT@num

— Kết quả : 9.96

Theo khai báo, tất cả chúng ta chỉ sử dụng 2 chữ số để lưu phần thập phân. Do đó, khi tài liệu lớn hơn, mạng lưới hệ thống sẽ tự làm tròn và lấy đúng 2 chữ số thập phân .

1234567

DECLARE@numdecimal(4,2)

SET@num=100

SELECT@num

— Kết quả : Arithmetic overflow error converting numeric to data type numeric .

Trong ví dụ này, dù ta không sử dụng phần thập phân, tuy nhiên theo khai báo ta đã lấy 2 trên tổng số 4 số để tàng trữ phần thập phân. Do đó, chỉ với 2 chữ số, tất cả chúng ta không hề tàng trữ được giá trị 100 .

Precision Kích thước
1-9 5 bytes
10-19 9 bytes
20-28 13 bytes
28-38 17 bytes

Dữ liệu tiền tệ — money và smallmoney

Dùng để trình diễn một giá trị về tiền tệ .

Kiểu dữ liệu Khoảng giá trị Kích thước
money $-922,337,203,685,477.5808 \rightarrow 922,337,203,685,477.5807$ 8 bytes
smallmoney $- 214,748.3648 \rightarrow 214,748.3647$ 4 bytes

bit

Một số kiểu bit hoàn toàn có thể nhận một trong những giá trị : 1, 0, NULL .
SQLServer Database Engine có chính sách tối ưu hóa việc tàng trữ những cột có kiểu giá trị bit. Nó sẽ gộp những cột có kiểu giá trị bit lại để tàng trữ chung. Do đó, nếu có từ 1 -> 8 cột kiểu bit sẽ cần 1 bytes để tàng trữ, 9-16 cột sẽ cần 2 bytes …

Approximate numerics

Là các kiểu dữ liệu để lưu trữ số thực. Các kiểu dữ liệu này sử dụng phương pháp floating point để biểu diễn một số thực. Approximate-number data types bao gồm realfloat. Nhưng thực chất, real chính là float(24).

  • Cú pháp: float[(n)]
  • Tham số n: Kích thước của biến, tương tự float và double trong ngôn ngữ C. Tham số n có giá trị nằm trong đoạn [1, 53] và giá trị mặc định của n là 53.
Giá trị n Precision Kích thước
1-24 7 chữ số 4 bytes
25-53 15 chữ số 8 bytes

time

Dùng để màn biểu diễn một khoảng chừng thời hạn trong ngày trên định dạng 24 giờ .

  • Cú pháp: time[(fractional second scale)]
  • Tham số fractional second scale: Số thập phân của giây. Giá trị này nằm trong đoạn [1, 7] và có giá trị mặc định là 7.
  • Khoảng dữ liệu: 00:00:00.0000000 đến 23:59:59.9999999

Dùng để trình diễn một ngày .

  • Cú pháp: date
  • Định dạng mặc định: YYYY-MM-DD
  • Khoảng giá trị: 0001-01-01 đến 9999-12-31

Biểu diễn ngày và giờ. Giá trị giờ được trình diễn dưới định dạng 24 giờ. Có thể trình diễn cụ thể đến phần nghìn của giây ( 3 chữ số thập phân cho giá trị giây ) .

Khoảng giá trị ngày January 1, 1753  $\rightarrow$ December 31, 9999
Khoảng giá trị giờ 00:00:00 $\rightarrow$ 23:59:59.997
Khoảng giá trị từng phần tử
  • YYYY: $1753 \rightarrow 9999$
  • MM: $01 \rightarrow 12$
  • DD: $01 \rightarrow 31$ (tùy thuộc vào tháng)
  • hh: $00 \rightarrow 23$
  • mm: $00 \rightarrow 59$
  • ss: $00 \rightarrow 59$
  • n*: $0 \rightarrow 999$
Kích thước

Biểu diễn ngày và giờ. Giá trị giờ được trình diễn dưới định dạng 24 giờ. Có thể màn biểu diễn cụ thể đến phút. Giá trị giây mặc định 00 và không kèm phần thập phân .

Khoảng giá trị ngày January 1, 1753  $\rightarrow$ December 31, 9999
Khoảng giá trị giờ 00:00:00 $\rightarrow$ 23:59:59.997
Khoảng giá trị từng phần tử
  • YYYY: $1753 \rightarrow 9999$
  • MM: $01 \rightarrow 12$
  • DD: $01 \rightarrow 31$ (tùy thuộc vào tháng)
  • hh: $00 \rightarrow 23$
  • mm: $00 \rightarrow 59$
Kích thước 4 bytes

Biểu diễn ngày và giờ. Giá trị giờ được màn biểu diễn dưới định dạng 24 giờ. Tương tự kiểu tài liệu datetime. Nhưng được lan rộng ra hơn về khoảng chừng giá trị những thành phần. Cũng như hoàn toàn có thể trình diễn chi tiết cụ thể hơn phần thập phân của giây .

  • Cú pháp: datetime2[(fractional seconds precision)]
  • Tham số fractional seconds precision: Mô tả độ chính xác của giá trị giây. Giá trị của tham số nằm trong đoạn [0-7]. Giá trị mặc định của tham số là 7
Khoảng giá trị ngày 0001-01-01 $\rightarrow$ 9999-12-31
Khoảng giá trị giờ 00:00:00 $\rightarrow$ 23:59:59.9999999
Khoảng giá trị từng phần tử
  • YYYY: $1753 \rightarrow 9999$
  • MM: $01 \rightarrow 12$
  • DD: $01 \rightarrow 31$ (tùy thuộc vào tháng)
  • hh: $00 \rightarrow 23$
  • mm: $00 \rightarrow 59$
  • ss: $00 \rightarrow 59$
  • n*: $0 \rightarrow 9999999$
Kích thước
  • Nếu precision < 3 thì kích thước 6 bytes
  • Nếu 3 $\leq$ precision $\leq$ 4 thì kích thước 7 bytes
  • Nếu precision > 4 thì kích thước 8 bytes

Kiểu tài liệu datetimeoffset nằm ngoài seri bài viết này. Bạn hoàn toàn có thể tìm hiểu thêm thêm tại trang tài liệu của Microsoft .

Character strings

Các loại kiểu tài liệu này dùng để tàng trữ những tài liệu dạng chuỗi. Bao gồm những kiểu :

char

  • Cú pháp: char[(n)]
  • Tham số n: Kích thước của chuỗi, tính bằng bytes. Giá trị của n nằm trong đoạn  [1, 8000].
  • Đặc điểm: kích thước của dữ liệu có kiểu char luôn được cố định. Nghĩa là khi bạn khai báo chiều dài của dữ liệu là 3 bytes, bạn chỉ lưu 1 chuỗi kí tự gồm 2 ký tự ‘ab’ thì byte thứ 3 vẫn được padding cho đủ (dù nó không chứa gì cả).

123456

DECLARE@my_strCHAR(3)

SET@my_str=’ ab ‘

SELECTDATALENGTH(@my_str),LEN(@my_str)

— Kết quả : 3 – 2

varchar

  • Cú pháp: varchar([n|max])
  • Tham số n: Kích thước [tối đa] của chuỗi, tính bằng bytes. Giá trị của n nằm trong đoạn  [1, 8000].
  • Giá trị max: là một hằng số, có giá trị $2^{31} -1$ (bytes) = 2GB
  • Đặc điểm: tham số n chỉ mang ý nghĩa giá trị tối đa của chuỗi được lưu trữ. Kích thước dữ liệu bằng với chiều dài của chuỗi dữ liệu.

123456

DECLARE@my_strVARCHAR(3)

SET@my_str=’ ab ‘

SELECTDATALENGTH(@my_str),LEN(@my_str)

–Kếtquả:2-2

text

Dùng để lưu trữ các chuỗi dữ liệu không chữa các kí tự unicode. Có thể xem kiểu text tương đương khả năng lưu trữ với varchar(max).

Unicode character strings

Các loại kiểu tài liệu này dùng để tàng trữ những chuỗi tài liệu chứa những ký tự unicode. Bao gồm những kiểu :

nchar

  • Cú pháp: nchar[(n)]
  • Tham số n: Kích thước của chuỗi, tính bằng bytes. Giá trị của n nằm trong đoạn [1, 4000]
  • Đặc điểm: nchar sử dụng đến 2bytes để lưu trữ 1 ký tự. Do đó, kích thước dữ liệu luôn gấp đôi giá trị n.

nvarchar

  • Cú pháp: nvarchar[(n|max)]
  • Tham số n: kích thước của chuỗi. Giá trị n nằm trong đoạn [1, 4000]
  • Đặc điểm: nvarchar sử dụng đến 2bytes để lưu trữ 1 ký tự. Do đó, kích thước của dữ liệu luôn gấp đôi kích thước thực của chuỗi.

ntext

Dùng để lưu trữ các chuỗi chứa kí tự unicode. Kích thước tối đa $2^{30}-1$ bytes. Kích thước dữ liệu sẽ gấp 2 lần chiều dài của chuỗi dữ liệu.

Các kiểu tài liệu khác

Ngoài những kiểu tài liệu cơ bản trên, SQLServer còn cung ứng cho tất cả chúng ta rất nhiều kiểu tài liệu đặc biệt quan trọng. Tuy nhiên, những kiểu tài liệu này nằm ngoài khoanh vùng phạm vi của loạt bài viết tiếp nối. Do đó, mình chỉ để link đến tài liệu của Microsoft cho những bạn tìm hiểu thêm .

Binary strings

Bao gồm những kiểu tài liệu :

Other data types

Bao gồm những kiểu tài liệu :