2012-06-15 30 views
5

Tôi nhận thấy rằng tinyint là một số nguyên byte (bằng cách này, nó được ký hoặc chưa ký?). Đối số (3) là gì? Tôi đã tìm kiếm và không thể tìm thấy câu trả lời.Ý nghĩa của tinyint (3) trong SQLite (SQLite) là gì?

+0

Tôi đang sử dụng SQLite và tôi don 't thấy bất kỳ sự khác biệt giữa 'tinyint' và' tinyint (3) '. – mk12

+2

@ Mk12 Đó là bởi vì SQLite "mô phỏng thực hiện" các kiểu dữ liệu (về cơ bản, nó chấp nhận cú pháp nhưng bỏ qua nó). Đọc hướng dẫn sử dụng tốt. –

Trả lời

3

Xem this blog page về định nghĩa kiểu cột MySQL.

Đối với công cụ sửa đổi độ dài loại số thực sự là chiều rộng hiển thị, không liên quan gì đến những gì có thể được lưu trữ trong trường. Có, đó là nó - cả TINYINT (1) và TINYINT (4) có thể lưu trữ các giá trị trong phạm vi -128..127 (hoặc cho giá trị unsigned 0..255), và là kiểu dữ liệu hoàn toàn giống nhau, với một twist nhỏ (mà ngày liên quan truy xuất - xem bên dưới). Dưới đây là giải thích về những gì có nghĩa là độ rộng màn hình, lấy trực tiếp từ các nguồn:

Chiều rộng hiển thị không hạn chế phạm vi của giá trị có thể được lưu trữ trong cột, cũng không phải là số chữ số được hiển thị đối với các giá trị có chiều rộng vượt quá giá trị được chỉ định cho cột. Ví dụ, một cột được chỉ định là SMALLINT (3) có phạm vi SMALLINT thông thường là -32768 đến 32767 và các giá trị ngoài phạm vi cho phép bởi ba ký tự được hiển thị bằng cách sử dụng nhiều hơn ba ký tự.

+0

Câu hỏi đặt ra là về SQLite, nhưng tôi nhận thấy rằng OP đã thêm độ chính xác này sau khi bạn trả lời. Câu trả lời khác hiện có liên quan hơn, không chắc chắn tại sao câu trả lời này được chấp nhận. – Benjamin

5

SQLite "dụng cụ giả" dữ liệu loại trên cột. Về cơ bản, nó chấp nhận cú pháp SQL chuẩn nhưng bỏ qua nó. (Nhưng xem loại mối quan hệ và cưỡng chế.)

Xem Manifest Typing trong tài liệu "khác biệt".

Hầu hết các công cụ cơ sở dữ liệu SQL đều sử dụng tính năng nhập tĩnh. Một kiểu dữ liệu được liên kết với mỗi cột trong một bảng và chỉ các giá trị của kiểu dữ liệu cụ thể đó mới được phép lưu trữ trong cột đó. SQLite giải phóng hạn chế này bằng cách sử dụng tính năng đánh dấu biểu hiện. Trong kiểu nhập tệp kê khai, kiểu dữ liệu là thuộc tính của chính giá trị, không phải của cột trong đó giá trị được lưu trữ. SQLite do đó cho phép người dùng lưu trữ bất kỳ giá trị nào của bất kỳ kiểu dữ liệu nào vào bất kỳ cột nào bất kể loại khai báo của cột đó. (Có một số trường hợp ngoại lệ cho quy tắc này: Một cột INTEGER PRIMARY KEY có thể chỉ cửa hàng số nguyên Và nỗ lực SQLite để ép buộc giá trị vào các kiểu dữ liệu công bố của cột khi nó có thể..)

Cũng thấy Datatypes in SQLite Version 3 và gõ Affinity:

các mối quan hệ của một cột được xác định bởi kiểu tuyên bố của cột, theo các quy tắc sau theo thứ tự hiển thị:

  • Nếu loại được khai báo chứa chuỗi "INT" thì nó được gán INTEGER affinity.

  • [quy tắc khác bỏ qua cho ngắn gọn]


Đối với cơ sở dữ liệu khác, hãy xem tài liệu cơ sở dữ liệu cụ thể phù hợp :-)