2009-12-03 114 views
40

Sự khác biệt giữa kiểu dữ liệu SQL NUMERIC và DECIMAL là gì? Nếu cơ sở dữ liệu đối xử với những cách khác nhau, tôi muốn biết làm thế nào cho ít nhất:Sự khác nhau giữa DECIMAL và NUMERIC

  • SQL Server
  • Oracle
  • Db/2
  • MySQL
  • PostgreSQL

Hơn nữa, có bất kỳ sự khác biệt trong cách trình điều khiển cơ sở dữ liệu giải thích các loại này?

+1

Đối với Oracle cùng vì cả hai được chuyển đổi cho 'NUMBER' http://download.oracle.com/docs/cd/E11882_01/server. 112/e17118/sql_elements001.htm # i54335 –

Trả lời

6

Chúng là từ đồng nghĩa, không có sự khác biệt nào cả.

Ít nhất trên SQL Server trong các tiêu chuẩn SQL ANSI. SO answer shows một số khác biệt trong ANSI nhưng tôi nghi ngờ khi triển khai chúng giống nhau

+1

Tương tự với Oracle: http://techonthenet.com/oracle/datatypes.php –

30

Chúng giống nhau cho hầu hết mọi mục đích.

Tại một thời điểm, các nhà cung cấp khác nhau sử dụng các tên khác nhau (Số/Thập phân) cho gần như giống nhau. SQL-92 làm cho chúng giống nhau với một khác biệt nhỏ có thể là nhà cung cấp cụ thể:

NUMERIC phải chính xác như được xác định - vì vậy nếu bạn xác định 4 chữ số thập phân, DB phải luôn lưu trữ 4 chữ số thập phân.

DECIMAL phải là ít nhất chính xác như được xác định. Điều này có nghĩa rằng cơ sở dữ liệu thực sự có thể lưu trữ nhiều chữ số hơn so với chỉ định (do bộ nhớ hậu trường có không gian cho các chữ số phụ). Điều này có nghĩa là cơ sở dữ liệu có thể lưu trữ 1.00005 thay vì 1.0000, ảnh hưởng đến các tính toán trong tương lai.

Trong SQL Server Numeric được định nghĩa là giống hệt với thập phân theo mọi cách - cả hai sẽ luôn chỉ lưu trữ số lượng vị trí thập phân được chỉ định.

+2

là số thập phân/số không phải là cách khác? http://stackoverflow.com/questions/759401/is-there-any-difference-between-decimal-and-numeric-in-ms-sql/759606#759606 – gbn

+2

Vâng, đó là chính xác. – David

+0

Đã chỉnh sửa thành * be * "cách khác xung quanh", để rõ ràng; Tôi nghĩ rằng những đường gạch ngang của David khó hiểu hơn là hữu ích. – Quuxplusone

3

Postgres:Không chênh lệch

trong documentation mô tả trong bảng 8.1 trông giống nhau, nhưng nó không được giải thích lý do tại sao nó được đề cập riêng biệt, vì vậy theo Tom ngõ post

Có không có bất kỳ sự khác biệt nào, trong số Postgres. Có hai tên loại vì tiêu chuẩn SQL yêu cầu chúng tôi chấp nhận cả hai tên. Trong một cái nhìn nhanh chóng trong tiêu chuẩn nó xuất hiện rằng sự khác biệt duy nhất là thế này:

 17)NUMERIC specifies the data type exact numeric, with the decimal 
     precision and scale specified by the <precision> and <scale>. 

    18)DECIMAL specifies the data type exact numeric, with the decimal 
     scale specified by the <scale> and the implementation-defined 
     decimal precision equal to or greater than the value of the 
     specified <precision>. 

tức là, cho DECIMAL thực hiện được phép để cho phép nhiều chữ số hơn yêu cầu bên trái dấu thập phân. Postgres không thực hiện quyền tự do đó nên không có sự khác biệt nào giữa các loại này đối với chúng tôi.

 regards, tom lane 

cũng một trang thấp nêu rõ, rằng

Các loại thập phân và số là tương đương. Cả hai loại là một phần của tiêu chuẩn SQL.

và cũng tại aliases tabledecimal [ (p, s) ] được nhắc đến như bí danh cho numeric [ (p, s) ]

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