2011-07-30 52 views
8

Im mới để lập trình cơ sở dữ liệu và tôi có một câu hỏi rất cơ bản:MySQL kiểu dữ liệu cơ sở dữ liệu

Trong tôi PHPMyAdmin GUI rằng Im sử dụng để tạo bảng trong cơ sở dữ liệu của tôi, những gì nó có nghĩa là khi cột "gõ" (tức là datatype) có kiểu dữ liệu và một cái gì đó trong ngoặc sau đó. Ví dụ: int (20), bigint (30) .....

Tôi hiểu loại int và bigint ngụ ý số lượng byte được sử dụng và do đó phạm vi giá trị có thể được lưu trữ. Nhưng giá trị trong ngoặc có nghĩa là gì?

làm gì (20) và (30) đại diện cho .... những gì tác động, hiện nay có trên ....

Xin lỗi nếu Q là cơ bản, tôi đang cố gắng để hiểu được cơ sở dữ liệu .. ..

Cảm ơn rất nhiều

Trả lời

12

Về cơ bản đây là một Display Width.

Tôi đã tìm thấy giải thích rất tốt về khái niệm này here is vì vậy đã quyết định không tự mô tả nó và cho phép bạn tự đọc nó từ nguồn ban đầu.

Trong cùng một cách mà một max-chiều dài có thể được chỉ định cho chuỗi các kiểu dữ liệu (ví dụ VARCHAR (5) = 5 nhân vật tối đa), các tế bào kiểu dữ liệu Numeric có thể có một "Display Chiều dài" nào đó (Ví dụ: INT (5)).

Có một quan niệm sai lầm phổ biến rằng việc chỉ định Độ dài hiển thị trên cột INT sẽ giới hạn phạm vi cột đó. Ví dụ, người ta thường nghĩ rằng việc xác định một cột là INT (1) sẽ giảm phạm vi không dấu của cột xuống 0 - 9, và INT (2) sẽ giảm phạm vi không dấu của cột xuống 0 - 99. Đây không phải là trường hợp. An INT cột dữ liệu LUÔN LUÔN sẽ có dải không được ký là 0 - 4294967295 hoặc dải ký hiệu -2147483648 đến 2147483647, bất kể Chiều rộng màn hình được chỉ định, cho dù đó là 1 (INT (1)) hoặc 20 (INT (20)).

  1. Chiều rộng màn hình không thay đổi yêu cầu bộ nhớ cho loại dữ liệu.
  2. Chiều rộng màn hình không làm thay đổi dữ liệu thực tế theo bất kỳ cách nào (ví dụ: lưu trữ toàn bộ giá trị cho dữ liệu)
  3. Cột trả về giá trị đầy đủ khi được gọi trong truy vấn, bất kể chiều rộng màn hình (sách trực tiếp mâu thuẫn với tuyên bố này nó làm như đã thấy ở trên)
+0

Cảm ơn câu trả lời chi tiết của bạn. Cảm kích điều đó. – banditKing

+0

@ user657514 'INT (x)'/'BIGINT (x)' là * khác * so với 'VARCHAR (x)'/'CHAR (x)' hoặc 'NUMERIC (x, y)'. Ở nơi trước nó chỉ là một "chiều rộng màn hình". Các trường hợp sau nó thực sự áp đặt một giới hạn. Điều này được giải quyết trong suốt phản ứng, nhưng nó là khó hiểu để "nhìn thấy". –

+0

@ sll Tôi tìm thấy liên kết đó ... không tốt lắm. Theo bài viết 'VARCHAR (55)' không thể lưu trữ một chuỗi ký tự không có độ dài bằng 0! Niềm tin của tôi về độ chính xác trong nguồn được giảm bớt. :( –

0

Giá trị trong khung là kích thước hoặc chiều dài của trường. [Chỉnh sửa cảnh cáo] Nếu đặt thành 2 trường uint chỉ có thể lưu trữ giá trị từ 0 đến 99. [/ strike] Bạn có thể đặt giá trị này theo cách riêng của mình và do đó tiết kiệm một chút bộ nhớ nếu bạn mong đợi giá trị của bạn không vượt quá giới hạn này. Hữu ích trong kết nối với varchar.

đây một thread về kích thước varchar: What are the optimum varchar sizes for MySQL?

+0

bạn có chắc chắn rằng int (2) sẽ hạn chế phạm vi giá trị mà có thể lưu trữ cột int để 0-99 – sll

+0

hmm. vì vậy nếu tôi có INT làm kiểu dữ liệu, thì phạm vi giá trị mà nó hỗ trợ là: -2147483648 đến 2147483647. Nhưng nếu tôi dự đoán rằng tôi sẽ không sử dụng toàn bộ dải này, tôi có thể đặt giá trị trong ngoặc như sau: INT (4) và làm điều đó có nghĩa là phạm vi trên được giảm xuống còn 3647? Bạn có thể đưa ra một ví dụ thực tế để làm rõ. Cảm ơn – banditKing

+1

Không, tôi xin lỗi. Điều này chỉ hợp lệ đối với ký tự. Xem câu trả lời của sll! –

Các vấn đề liên quan