2013-03-11 44 views
10

Sự khác nhau giữa binary(10)char(10)character set binary là gì?MySQL "binary" vs "char character set binary"

varbinary(10) vs varchar(10)character set binary?

Chúng có đồng nghĩa với tất cả Công cụ MySQL không?

Có lưu ý nào để xem không?

Trả lời

9

Không có sự khác biệt.

Tuy nhiên, có một báo trước nếu bạn đang lưu trữ một chuỗi.

Nếu bạn chỉ muốn lưu trữ một mảng byte hoặc dữ liệu nhị phân khác chẳng hạn như luồng hoặc tệp, hãy sử dụng loại nhị phân như ý nghĩa của chúng.

Trích từ MySQL manual:

Việc sử dụng CHARACTER SET nhị phân trong định nghĩa của một CHAR, VARCHAR, hoặc cột TEXT làm cho cột để được coi như một kiểu dữ liệu nhị phân. Ví dụ, các cặp sau đây định nghĩa là tương đương:

CHAR(10) CHARACTER SET binary 
BINARY(10) 

VARCHAR(10) CHARACTER SET binary 
VARBINARY(10) 

TEXT CHARACTER SET binary 
BLOB 

Vì vậy, về mặt kỹ thuật không có sự khác biệt.

Tuy nhiên, khi lưu trữ chuỗi, chuỗi phải được chuyển đổi từ giá trị chuỗi sang byte bằng cách sử dụng bộ ký tự. Quyết định là tự mình làm điều này trước máy chủ MySQL hoặc bạn để nó lên đến MySQL để làm cho bạn. MySQL sẽ thực hiện bằng cách truyền một chuỗi tới BINARY bằng cách sử dụng các bộ ký tự BIN.

Nếu bạn muốn lưu mã hóa ở định dạng khác, giả sử bạn có yêu cầu nghiệp vụ cho biết bạn phải sử dụng 4 byte cho mỗi ký tự (MySQL không thực hiện theo mặc định), bạn có thể sử dụng "CHARACTER SET BINARY "vào một cột văn bản và thực hiện bộ ký tự mã hóa chính mình.

Nó cũng đáng đọc The BINARY and VARBINARY Types từ hướng dẫn sử dụng MySQL vì chi tiết này thông tin quan trọng như đệm.

Tóm tắt: Không có sự khác biệt về mặt kỹ thuật vì đây là từ đồng nghĩa với từ khác. Theo ý kiến ​​của tôi, lưu trữ chuỗi nhị phân trong các kiểu dữ liệu thường giữ chuỗi bằng cách sử dụng "CHARACTER SET BINARY" và lưu trữ mảng byte/luồng vv trong trường BINARY không thể biểu diễn bằng cách chuyển đổi dữ liệu mặc dù bộ ký tự .

+0

Tôi đang lưu trữ mảng byte. Nếu cả hai tùy chọn đều đồng nghĩa, tại sao bạn nói * "sử dụng kiểu nhị phân vì đó là những gì được thiết kế cho" *? Không phải là 'char character set binary' được thiết kế cho mảng byte không? – Pacerier

+0

@Pacerier thực sự là từ ngữ xấu trên phần của tôi (tôi sẽ làm cho điều này rõ ràng hơn trong câu trả lời của tôi), bộ ký tự nhị phân đặt là một từ đồng nghĩa cho nhị phân để về mặt kỹ thuật không có sự khác biệt. IMO dễ hiểu hơn khi lưu trữ luồng nhị phân (không thể đại diện bởi bộ ký tự và đối chiếu) có ý nghĩa trong BINARY, nếu bạn đang thực hiện mã hóa ký tự của mình, bạn nên lưu trữ trong trường bằng CHARACTER SET BINARY – Steve

+1

@ Ic, btw bạn có biết nếu hành vi này là * chính thức *, hay các công cụ vẫn được phép thực hiện riêng của họ? – Pacerier