Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

lưu trữ số âm trong trường thập phân của bảng mysql kể từ phiên bản 5.0.3

Theo những gì tôi hiểu, tài liệu nói rằng nó sẽ không lưu trữ chữ "-" ký tự , có nghĩa là nó có thể hiện đang làm những gì mà các trường INTEGER có dấu khác luôn làm và thay vào đó nó lưu trữ một bit dấu để biểu thị các số âm.

Bạn vẫn thấy một dấu trừ đứng trước số vì nó được MySQL tạo ra từ kết quả của bit dấu đó.

Nếu bạn không hiểu về bit dấu, bạn có thể xem xét cách một byte có dấu có thể lưu trữ các số từ -128 đến 127, trong khi một byte không dấu có thể lưu trữ các số từ 0 đến 255. Đó là bởi vì một trong 8 bit trong số có dấu là được sử dụng để lưu trữ +/- (1 là âm, 0 là dương), trong khi các bit còn lại cung cấp số lên đến 2 ^ 7 (-128 hoặc 127).

Vì vậy, ví dụ, nếu các bit 1111 có một bit dấu, chúng sẽ bằng -7 (âm + 4 + 2 + 1), nhưng nếu không có dấu, chúng sẽ bằng 15 (8 + 4 + 2 + 1). Nó vẫn được lưu trữ cùng một lượng bit.

Bạn có thể thắc mắc tại sao giới hạn âm trong một số có dấu có thể sử dụng bit thứ 8, trong khi giới hạn dương được giới hạn trong tổng của 7 bit (nhỏ hơn 1 bit so với bit thứ 8). Điều này là do 10000000 được coi là đồng thời cả âm và bit thứ 8, bởi vì biểu diễn của nó là -0, ngược lại là dư thừa với 00000000 đại diện cho 0. Không có sự phân biệt giữa số 0 âm và dương, vì vậy bit âm có ý nghĩa nhất luôn là giá trị của chính bit đó (nhưng âm).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL tương đương với mô-đun dblink của PostgreSQL?

  2. Tại sao việc chèn / cập nhật MySQL InnoDB trên các bảng lớn rất chậm khi có một vài chỉ mục?

  3. dấu nháy đơn trong khi Chèn (Mysql)

  4. python odo sql AssertionError:datashape phải là Loại bản ghi, có 0 * {...}

  5. Cách bảo mật MySQL:Phần thứ hai