Thêm mysql chưa được ký

Trong mấy năm làm việc với MySQL, có một thời gian dài tôi không để ý đến thuộc tính ZEROFILL và UNSIGNED của MySQL cho đến khi cần sử dụng ZEROFILL cho một ứng dụng nào đó

Những thuộc tính này là gì? . ZEROFILL dùng để điền số 0 vào một số nguyên sao cho tất cả các số trong cột có cùng số chữ số

Với những gì họ đang có, unsigned có nghĩa là "không có dấu hiệu", tôi. e. không có dấu trừ (-) nên chỉ lưu số dương. Trong khi điền vào số không được sử dụng cụ thể hơn để điền vào các số không ở bên trái trong trường hợp này

Tại sao nên sử dụng UNSIGNED

Nhiều nhà phát triển không quan tâm đến việc điều chỉnh các thuộc tính như thế này vì ngay cả khi họ sai, hầu hết thời gian họ không phá vỡ ứng dụng

Nhưng dù sao đi nữa, luôn có cách phù hợp để thực hiện và trong trường hợp này, cách tối ưu nhất sẽ mang lại cho chúng tôi tính nhất quán hơn trong cơ sở dữ liệu của mình và tiết kiệm dung lượng cho khối lượng dữ liệu lớn hơn

Luôn sử dụng UNSIGNED để biểu thị toàn bộ giá trị sẽ không bao giờ âm. Ví dụ: id AUTO_INCREMENT bắt đầu từ 1 sẽ không bao giờ âm

Ưu điểm chính của việc sử dụng thuộc tính này là MySQL sẽ không phân bổ không gian không cần thiết cho các số âm từ -2147483648 đến 0 và sẽ nhân đôi không gian cho các số dương từ 0 đến 4294967295. Nguồn. mysql

Tại sao nên sử dụng ZEROFILL

Vai trò của thuộc tính ZEROFILL chỉ là để cho MySQL biết thông tin sẽ được hiển thị như thế nào. Nó không ảnh hưởng đến cách dữ liệu được lưu trữ

Nếu bạn cần thực hiện một WHERE 0001=1, SQL sẽ vẫn hoạt động như mong đợi

Do đó, chỉ vì mục đích thẩm mỹ, bạn có thể sử dụng thuộc tính này để luôn có sự nhất quán về các chữ số của số nguyên trong ứng dụng của mình. Theo tôi, không có gì không thể giải quyết được ở giao diện người dùng, nhưng nếu bạn muốn giữ chế độ xem của các cột có dữ liệu ở định dạng 00010, 00011, 00012, v.v. nó hợp lệ để sử dụng phương pháp này

Số không với ZEROFILL

Để chỉ định bạn muốn hiển thị bao nhiêu số 0 ở đầu, bạn cần chỉ định kích thước cột khi tạo hoặc thay đổi bảng, chẳng hạn. INT(5). Xem các đoạn tiếp theo để biết cách tạo hoặc thay đổi bảng

Nếu là số lớn hơn 5 thì số đó không bị cắt bỏ mà hiển thị bình thường từ 6 chữ số trở lên. Và nếu nó nhỏ hơn, nó sẽ chứa đầy số không

Hành vi này của INT(5) chỉ nhằm mục đích xem vì một số nguyên luôn có cùng kích thước, nhưng tôi hiểu rằng nó hoàn toàn khác với VARCHAR(5), trong đó chuỗi bị cắt và tôi đồng ý rằng điều này hơi khó hiểu

Sửa đổi một bảng hiện có

Để thay đổi thuộc tính UNSIGNED hoặc ZEROFILL trong bảng bạn đã tạo, hãy sử dụng cú pháp ALTER TABLE

ALTER TABLE table_name MODIFY COLUMN column_name INT { NOT NULL | UNSIGNED | ZEROFILL | DEFAULT };

CHƯA KÝ

Ví dụ: lệnh bên dưới sẽ thay đổi số bảng và cột thành UNSIGNED. Giữ dữ liệu nếu cột đã có kiểu INT

Cảnh báo. Bạn cũng phải sửa đổi DEFAULT, NOT_NULL và AUTO_INCREMENT nếu có. Nếu bạn không chỉ định các thuộc tính này, chúng sẽ được sửa đổi thành mặc định của MySQL. Cân nhắc kiểm tra bằng bảng kiểm tra trước khi thay đổi dữ liệu quan trọng

cảnh báo 2. Mọi số âm được lưu trữ trong cột này sẽ được chuyển đổi thành "0", vì vậy hãy thận trọng khi sử dụng

ALTER TABLE table_name MODIFY column_name INT UNSIGNED NOT NULL;

ZEROFILL

Như đã nêu ở trên, khi một cột có ZEROFILL, nó sẽ tự động được chọn UNSIGNED

Lưu ý rằng sự khác biệt duy nhất trong ví dụ để thay đổi thành không dấu là tôi đã sử dụng kích thước/chiều dài trong INT, với chiều rộng 5 chữ số. Điều này không có nghĩa là bạn sẽ có thể nhập các số có tối đa 5 chữ số hoặc bạn sẽ mất dữ liệu lớn hơn 99999, mà nó chỉ có nghĩa là MySQL sẽ luôn cố gắng điền các số 0 cho đến khi đủ 5 chữ số, e. g. 00123

Cảnh báo. Bạn cũng phải sửa đổi DEFAULT, NOT_NULL và AUTO_INCREMENT nếu có. Nếu bạn không chỉ định các thuộc tính này, chúng sẽ được sửa đổi thành mặc định của MySQL. Cân nhắc kiểm tra bằng bảng kiểm tra trước khi thay đổi dữ liệu quan trọng

cảnh báo 2. Mọi số âm được lưu trữ trong cột này sẽ được chuyển đổi thành "0" do chuyển đổi không dấu tự động, vì vậy hãy thận trọng khi sử dụng số này

ALTER TABLE table_name MODIFY column_name INT(5) ZEROFILL NOT NULL;

Tạo cột với ZEROFILL và UNSIGNED

Ví dụ này chỉ mang tính chất tham khảo vì chúng ta cũng làm tương tự như trong ALTER TABLE

Để tạo một bảng xác định các thuộc tính này dễ dàng hơn là sửa đổi một bảng hiện có vì bạn không phải lo lắng về việc mất dữ liệu (trong trường hợp số âm)

Dưới đây là mã để tạo bảng bằng ZEROFILL và do đó UNSIGNED. Để thay đổi kích thước định dạng của các số không, hãy thay đổi kích thước hiển thị của số nguyên trong INT(5)

Làm cách nào để đặt INT không dấu trong MySQL?

Đầu tiên, hãy tạo một bảng MediumIntTable bằng câu lệnh CREATE. TẠO BẢNG MediumIntTable( ID mediumint AUTO_INCREMENT, value_1 mediumint, value_2 mediumint(6) UNSIGNED, PRIMARY KEY (ID) );

Làm cách nào để thêm id tăng tự động trong MySQL?

Để thêm cột số nguyên AUTO_INCREMENT mới có tên c. ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (c) ; .

INT đã ký và chưa ký trong MySQL là gì?

Phạm vi đã ký là -2147483648 đến 2147483647. Dải ô không dấu là từ 0 đến 4294967295 . Loại này là một từ đồng nghĩa với INT. Một số nguyên lớn.

Làm cách nào để thêm khóa ngoại vào bảng hiện có trong MySQL?

Sau đây là cú pháp của câu lệnh ALTER TABLE để thêm khóa ngoại vào bảng hiện có. .
THAY ĐỔI BẢNG tên_bảng
THÊM [CONSTRAINT [ký hiệu]] KHÓA NGOẠI
[tên_chỉ_số] (tên_cột,. )
THAM KHẢO tên_bảng (tên_cột,. )
BẬT XÓA tham chiếuTùy chọn
TRÊN CẬP NHẬT tham chiếuTùy chọn