Hướng dẫn type conversion mysql - loại chuyển đổi mysql
Khi một toán tử được sử dụng với các toán hạng thuộc các loại khác nhau, việc chuyển đổi loại sẽ xảy ra để làm cho các toán hạng tương thích. Một số chuyển đổi xảy ra ngầm. Ví dụ: MySQL tự động chuyển đổi các chuỗi thành các số khi cần thiết và ngược lại.
Cũng có thể chuyển đổi một số thành một chuỗi một cách rõ ràng bằng cách sử dụng hàm
Xem sau trong phần này để biết thông tin về bộ ký tự của các chuyển đổi số sang chuỗi ẩn và đối với các quy tắc được sửa đổi áp dụng cho các câu lệnh 0.Các quy tắc sau đây mô tả cách chuyển đổi xảy ra cho các hoạt động so sánh:
Để biết thông tin về chuyển đổi các giá trị từ loại thời gian này sang loại thời gian khác, hãy xem Phần & NBSP; 11.2.7, Chuyển đổi giữa các loại ngày và thời gian. So sánh các giá trị JSON diễn ra ở hai cấp độ. Mức so sánh đầu tiên dựa trên các loại JSON của các giá trị so sánh. Nếu các loại khác nhau, kết quả so sánh được xác định chỉ bằng loại có ưu tiên cao hơn. Nếu hai giá trị có cùng loại JSON, mức so sánh thứ hai xảy ra bằng cách sử dụng các quy tắc cụ thể loại. Để so sánh các giá trị JSON và không phải là JSON, giá trị không phải là JSON được chuyển đổi thành JSON và các giá trị được so sánh dưới dạng giá trị JSON. Để biết chi tiết, xem so sánh và đặt hàng của các giá trị JSON. Các ví dụ sau đây minh họa việc chuyển đổi các chuỗi thành các số cho các hoạt động so sánh:
Để so sánh cột chuỗi với một số, MySQL không thể sử dụng chỉ mục trên cột để tra cứu giá trị một cách nhanh chóng. Nếu 5 là cột chuỗi được lập chỉ mục, chỉ mục không thể được sử dụng khi thực hiện tra cứu trong câu lệnh sau:
Lý do cho điều này là có nhiều chuỗi khác nhau có thể chuyển đổi thành giá trị 6, chẳng hạn như 7, 8 hoặc 9.So sánh giữa các số điểm nổi và các giá trị lớn của loại 0 là gần đúng vì số nguyên được chuyển đổi thành điểm nổi có độ chính xác kép trước khi so sánh, không có khả năng biểu diễn chính xác tất cả các số nguyên 64 bit. Ví dụ, giá trị số nguyên 253 + 1 không thể được thể hiện dưới dạng phao và được làm tròn đến 253 hoặc 253 + 2 trước khi so sánh phao, tùy thuộc vào nền tảng.Để minh họa, chỉ có các so sánh đầu tiên so sánh các giá trị bằng nhau, nhưng cả hai so sánh đều trả về đúng (1):
Khi chuyển đổi từ chuỗi sang điểm nổi và từ số nguyên sang điểm nổi xảy ra, chúng không nhất thiết phải xảy ra theo cùng một cách. Số nguyên có thể được chuyển đổi thành điểm nổi bởi CPU, trong khi chuỗi được chuyển đổi chữ số theo chữ số trong một hoạt động liên quan đến phép nhân điểm nổi. Ngoài ra, kết quả có thể bị ảnh hưởng bởi các yếu tố như kiến trúc máy tính hoặc phiên bản trình biên dịch hoặc cấp độ tối ưu hóa. Một cách để tránh các vấn đề như vậy là sử dụng
Để biết thêm thông tin về so sánh điểm nổi, xem Phần & NBSP; B.3.4.8, Các vấn đề với các giá trị dấu phẩy động. Máy chủ bao gồm 2, thư viện chuyển đổi cung cấp cơ sở để cải thiện chuyển đổi giữa các giá trị chuỗi hoặc 3 và các số xấp xỉ-giá trị (____ 34/________ 35):
Bởi vì các chuyển đổi được tạo ra bởi thư viện này khác nhau trong một số trường hợp từ kết quả không phải là không, nên tiềm năng tồn tại đối với sự không tương thích trong các ứng dụng dựa trên kết quả trước đó. Ví dụ, các ứng dụng phụ thuộc vào kết quả chính xác cụ thể từ các chuyển đổi trước đó có thể cần điều chỉnh để phù hợp với độ chính xác bổ sung. Thư viện 2 cung cấp các chuyển đổi với các thuộc tính sau. 9 đại diện cho một giá trị với biểu diễn 3 hoặc chuỗi và 1 đại diện cho một số điểm nổi ở định dạng nhị phân gốc (IEEE).
Các thuộc tính này ngụ ý rằng 1 -> 9 -> 1 Chuyển đổi là không mất trừ khi 1 là 4, 5 hoặc 6. Các giá trị sau không được hỗ trợ vì tiêu chuẩn SQL định nghĩa chúng là giá trị không hợp lệ cho 4 hoặc 5.Đối với 9 -> 1 -> 9 Chuyển đổi, một điều kiện đủ cho sự không mất mát là 9 sử dụng 15 hoặc ít hơn các chữ số chính xác, không phải là giá trị phi bình thường, 4, 5 hoặc 6. Trong một số trường hợp, việc chuyển đổi là không mất mát ngay cả khi 9 có hơn 15 chữ số độ chính xác, nhưng điều này không phải lúc nào cũng đúng.Chuyển đổi tiềm ẩn của giá trị số hoặc thời gian thành chuỗi tạo ra một giá trị có bộ ký tự và đối chiếu được xác định bởi các biến hệ thống 7 và 8. .Điều này có nghĩa là một chuyển đổi như vậy dẫn đến một chuỗi ký tự (không phải) (giá trị 0, 1 hoặc 2), ngoại trừ trong trường hợp ký tự kết nối được đặt thành 3. Trong trường hợp đó, kết quả chuyển đổi là một chuỗi nhị phân (giá trị 4, 5 hoặc 6).Đối với các biểu thức số nguyên, các nhận xét trước về đánh giá biểu thức áp dụng hơi khác nhau để gán biểu thức; Ví dụ, trong một tuyên bố như thế này:evaluation apply somewhat differently for expression assignment; for example, in a statement such as this:
Trong trường hợp này, bảng trong cột kết quả từ biểu thức có loại 7 hoặc 8 tùy thuộc vào độ dài của biểu thức số nguyên. Nếu độ dài tối đa của biểu thức không phù hợp với 7, 8 được sử dụng thay thế. Độ dài được lấy từ giá trị CAST() 1 của siêu dữ liệu tập hợp kết quả CAST() 2 (xem C Cấu trúc dữ liệu cơ bản C API). Điều này có nghĩa là bạn có thể buộc 8 thay vì 7 bằng cách sử dụng một biểu thức đủ dài: |