Computer >> Máy Tính >  >> Lập trình >> MySQL

MySQL xử lý các giá trị số ngoài phạm vi như thế nào?

Việc xử lý giá trị số MySQL nằm ngoài phạm vi cho phép của kiểu dữ liệu cột phụ thuộc vào chế độ SQL theo những cách sau -

(A) Đã bật chế độ nghiêm ngặt SQL - Khi chế độ SQL nghiêm ngặt được bật, MySQL trả về lỗi khi nhập giá trị phạm vi. Trong trường hợp này, việc chèn một số hoặc tất cả các giá trị không thành công.

Ví dụ:chúng tôi đã tạo một bảng có hai cột có TINYINT và UNSIGNED TINYINT làm kiểu dữ liệu của chúng trên các cột.

 mysql> Tạo bảng đếm (Range1 Tinyint, Range2 Tinyint Unsigned); Truy vấn OK, 0 hàng bị ảnh hưởng (0,14 giây) 

Bây giờ với sự trợ giúp của lệnh sau, chúng tôi đã bật chế độ SQL nghiêm ngặt

 mysql> Đặt SQL_MODE ='truyền thống'; Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây) 

Bây giờ, nếu chúng tôi cố gắng chèn các giá trị nằm ngoài phạm vi vào các cột, MySQL sẽ phản ánh lỗi và cả hai lần chèn đều không thành công có thể được kiểm tra bằng truy vấn bên dưới -

 mysql> Chèn vào Giá trị đếm (Phạm vi1, Phạm vi2) (256,256); LỖI 1264 (22003):Giá trị nằm ngoài phạm vi cho cột 'Phạm vi1' tại hàng 1mysql> Chọn * để đếm; Tập hợp trống (0,00 giây)  

(B) Đã tắt chế độ nghiêm ngặt của SQL - Khi chế độ SQL hạn chế bị vô hiệu hóa, giá trị được MySQL cắt bớt đến điểm cuối phù hợp của kiểu dữ liệu cột đó và tích lũy giá trị kết quả. MySQL phản ánh các cảnh báo là kết quả của chuyển đổi gán cột xảy ra do cắt bớt.

Ví dụ:nếu chúng tôi sẽ chèn các giá trị trong cột sau khi tắt chế độ nghiêm ngặt của SQL, MySQL sẽ phản ánh các cảnh báo và lưu trữ các giá trị sau khi cắt chúng đến điểm cuối phù hợp. Nó có thể được hiểu với các truy vấn dưới đây -

 mysql> Đặt SQL_MODE =''; Truy vấn OK, 0 hàng bị ảnh hưởng (0,00 giây) mysql> Chèn vào giá trị đếm (Phạm vi1, Phạm vi2) (256,256); Truy vấn OK, 1 hàng bị ảnh hưởng, 2 cảnh báo (0,02 giây) mysql> Hiển thị cảnh báo; + --------- + ------ + ---------------------------- --------------------- + | Mức độ | Mã | Tin nhắn | + --------- + ------ + ------------------------------ ------------------- + | Cảnh báo | 1264 | Giá trị ngoài phạm vi cho cột 'Phạm vi1' ở hàng 1 || Cảnh báo | 1264 | Giá trị ngoài phạm vi cho cột 'Phạm vi 2' tại hàng 1 | + --------- + ------ + ------------------- ------------------------------ + 2 hàng trong bộ (0,00 giây) mysql> Chọn * từ Đếm; + --- ----- + -------- + | Phạm vi1 | Phạm vi2 | + -------- + -------- + | 127 | 255 | + -------- + -------- + 1 hàng trong bộ (0,00 giây)