Yêu cầu thg 1 15, 2019 9:55 SA 400 0 1
  • 400 0 1
+1

nchar trong mysql là gì?

Chia sẻ
  • 400 0 1

xin chào mọi người, mình đang tìm hiểu về database mysql, và phần đầu tiên là kiểu dữ liệu. mình gặp một câu hỏi là phân biệt nchar và char, và có câu trả lời là char sẽ lưu các ký tự non unicode. nhưng khi thực hành mình lại vẫn có thể lưu dc các ký tự unicode như "中华人中华人中华人". xin đc chỉ giáo ah.

1 CÂU TRẢ LỜI


Đã trả lời thg 1 16, 2019 4:00 SA
Đã được chấp nhận
+3

Một sai lầm khi nói rằng nchar hay n[var]char lưu đc unicode còn char hay [var]char thì là ununicode. Ngôn ngữ mà chúng ta nhìn thấy nó có sự phức tạp riêng còn nếu đưa lên máy tính thì nó chỉ là dạng byte mà thôi.

Còn về việc vì sao chúng ta vẫn có thể lưu các ký tự dạng unicode vào char thì theo mình là như này.

char nó sẽ biểu diễn ký tự dưới dạng 1 byte và chuẩn thì chính là bảng mã ASCII. nchar thì ngược lại bạn cần phải có tối thiểu là 2 byte (Tối thiểu bởi vì trước 2012 chúng ta dùng Utf-8 nhưng từ sau 2012 một số hệ quản trị đã nâng cấp lên Utf-16)

Vậy nếu 1 ký tự unicode có thể bểu diễn dưới dạng 1 byte thì hiển nhiên nó có thể lưu vào field có type là char rồi. Còn lại nếu không biểu thị đc thì thường từ đó sẽ được biểu diễn bằng các ký tự đặc biệt, thông thường là dấu ?.

Chia sẻ
Avatar nguyen @erics
thg 1 16, 2019 8:55 SA

bạn nói đúng, còn về phần vì sao nó lưu được các ký tự như vậy thì mình tìm hiểu được là: việc lưu trữ kỹ tự của char phụ thuộc vào collation của database, collation sẽ chỉ rõ việc sẽ phải lưu trữ 1 char như thế nào.

  • nếu bạn chọn collation là ascii, thì bạn sẽ k thể lưu trữ được các kỹ tự unicode dài hơn 2 bytes.
  • nếu chọn collation là utf thì bạn sẽ lưu trữ được các ký tự unicode dài hơn 2 bytes.
thg 1 16, 2019 9:04 SA

@erics Điều này chính xác. Dữ liệu được lưu ở các hqt còn phụ thuộc vào collation nữa. Rõ nhất là khi bạn tạo 1 DB ở mysql còn trong các hệ khác thì phải tự config nếu dùng GUI 😃

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí