PDA

View Full Version : so sánh kiêu dữ liệu..!!



quoctuanhoang
29-08-2003, 12:05
Lam ơn giúp tôi so sanh thật chi tiết 2 kiểu dữ liệu "char" và "varchar" khác nhau nhu thế nào?Tại sao khóa phải dùng "char" mà không là "varchar"..
Làm ơn giúp tôi gấp nhé..tôi đang cần..

cám ơn các ân nhân ..

quoctuanHoang.

danceswithwolves
30-08-2003, 08:05
khác nhau ở cách SQL Server lưu trữ dữ liệu. Kiểu char(N) được SQL Server sử dụng đúng N bytes (2xN cho kiểu nchar) dù cho giá trị lưu trữ thực tế nhỏ hơn N. Kiểu varchar/nvarchar thì flexible hơn, cần bao nhiêu thì dùng bấy nhiêu.

anyway, char/nchar có điểm mạnh riêng về index, sort... nhờ fixed size. Nhờ vậy, PK mà dùng char/nchar sẽ ưu về performance hơn varchar/nvarchar. Nhưng không ai bắt buộc phải dùng char/nchar làm key. Dùng cái chi thích hợp nhất là được.

danceswithwolves
30-08-2003, 08:06
quên nữa, cái gì mà "ân nhân" nghe lạnh người. Lên đây trao đổi thôi nhé. Good luck !

ducchien0219
03-06-2009, 10:06
cám ơn các pác nhiu!
cài nay em cũng cần update nè.

dq_ninh
03-06-2009, 14:20
nếu bạn dùng kiểu char thì khi nhập dữ liệu chương trình bắt bạn phải nhập đủ số kí tự bạn đã chọn,kiểu varchar thì cần bao nhiêu dùng bấy nhiêu, nếu dữ liệu bạn nhập vào chưa hết số kí tự mà bạn chọn thì chương trình sẽ tự động để khoảng trắng.tùy vào yêu cầu mà chọn kiểu char hoặc varchar.

Bạn Phù Dung nói không đúng hẳn. Nếu dùng char, khi nhập dữ liệu, không bắt buộc phải nhập đủ số ký tự. Nếu thiếu thì SQL sẽ lấp vào chỗ thiếu những ký tự của DBNull. Còn dùng varchar thì nhập bao nhiêu, viết vào CSDL bấy nhiêu.

Nói một cách khác, char thuộc về dạng chuỗi cố định (fixed length). Còn varchar thuộc về dạng chuỗi bất định (variable length).

Bạn Dances nói dùng char có lợi điểm về index, sort thật ra là không đúng. Điều này thật sự đúng vào thập niên 70, khi tiền thân của SQL còn là Sybase ver 4,5. Lúc đó, một record chỉ được dùng một varchar mà thôi. Phương pháp tồn trữ dữ liệu trong file hồi đó cũng khác hẳn bây giờ. Hồi đó, tất cả đều là chuỗi cố định. Và một cột thuộc chuỗi bất định được viết vào một ...trang khác (phải, trong MDF file được chia làm nhiều trang, gọi là page). Khi update, thì SQL sẽ dùng lại chuỗi cũ, chỉ update những bytes mà thôi. Nhưng hiện nay, tất cả đều là chuỗi bất định, cho dù bạn có dùng toàn char đi nữa, thì một record cũng là một chuỗi bất định. Với chuỗi bất định, khi một record được update, SQL không viết vào chỗ cũ nữa, mà viết vào một khoảng trống mới. Chuỗi cũ sẽ được đánh dấu là đelete. Dùng phương pháp này, update sẽ mau hơn, đặc biệt mau hơn khi dữ liệu của cột dùng cho index bị thay đổi.

Trời, tôi có nói nhiều quá không??? Thật sự ra, nếu nói về cách SQL bảo quản dữ liệu và những cấu trúc của những pages trong một MDF file phải tốn hết một quyển sách.

Thôi, tôi xin chấm dứt.