Chuyển sang int mysql
Hầu hết các công cụ cơ sở dữ liệu SQL (mọi công cụ cơ sở dữ liệu SQL khác với SQLite, theo như chúng tôi biết) đều sử dụng kiểu gõ tĩnh, cứng nhắc. Với kiểu nhập tĩnh, kiểu dữ liệu của một giá trị được xác định bởi vùng chứa của nó - cột cụ thể trong đó giá trị được lưu trữ Show
SQLite sử dụng một hệ thống kiểu động tổng quát hơn. Trong SQLite, kiểu dữ liệu của một giá trị được liên kết với chính giá trị đó, không phải với vùng chứa của nó. Hệ thống kiểu động của SQLite tương thích ngược với các hệ thống kiểu tĩnh phổ biến hơn của các công cụ cơ sở dữ liệu khác theo nghĩa là các câu lệnh SQL hoạt động trên cơ sở dữ liệu kiểu tĩnh hoạt động theo cùng một cách trong SQLite. Tuy nhiên, kiểu gõ động trong SQLite cho phép nó thực hiện những việc không thể thực hiện được trong cơ sở dữ liệu kiểu cứng nhắc truyền thống. Gõ linh hoạt là một tính năng của SQLite, không phải lỗi Cập nhật. Kể từ phiên bản 3. 37. 0 (27-11-2021), SQLite cung cấp các bảng STRICT thực thi kiểu cứng nhắc, dành cho các nhà phát triển thích kiểu đó Mỗi giá trị được lưu trữ trong cơ sở dữ liệu SQLite (hoặc được thao tác bởi công cụ cơ sở dữ liệu) có một trong các lớp lưu trữ sau
Một lớp lưu trữ tổng quát hơn một kiểu dữ liệu. Ví dụ, lớp lưu trữ INTEGER bao gồm 7 kiểu dữ liệu số nguyên khác nhau với độ dài khác nhau. Điều này tạo ra sự khác biệt trên đĩa. Nhưng ngay sau khi các giá trị INTEGER được đọc khỏi đĩa và vào bộ nhớ để xử lý, chúng sẽ được chuyển đổi thành kiểu dữ liệu chung nhất (số nguyên có dấu 8 byte). Và do đó, phần lớn, "lớp lưu trữ" không thể phân biệt được với "kiểu dữ liệu" và hai thuật ngữ này có thể được sử dụng thay thế cho nhau Bất kỳ cột nào trong cơ sở dữ liệu SQLite phiên bản 3, ngoại trừ cột INTEGER PRIMARY KEY, đều có thể được sử dụng để lưu trữ giá trị của bất kỳ lớp lưu trữ nào Tất cả các giá trị trong các câu lệnh SQL, cho dù chúng là các ký tự được nhúng trong văn bản câu lệnh SQL hay các tham số được liên kết với các câu lệnh SQL được biên dịch trước đều có một lớp lưu trữ ngầm định. Trong các trường hợp được mô tả bên dưới, công cụ cơ sở dữ liệu có thể chuyển đổi các giá trị giữa các lớp lưu trữ số (INTEGER và REAL) và TEXT trong khi thực hiện truy vấn 2. 1. Kiểu dữ liệu BooleanSQLite không có lớp lưu trữ Boolean riêng. Thay vào đó, các giá trị Boolean được lưu trữ dưới dạng số nguyên 0 (sai) và 1 (đúng) SQLite nhận ra các từ khóa "TRUE" và "FALSE", kể từ phiên bản 3. 23. 0 (2018-04-02) nhưng những từ khóa đó thực sự chỉ là cách viết thay thế cho các số nguyên lần lượt là 1 và 0 2. 2. Kiểu dữ liệu ngày và giờSQLite không có lớp lưu trữ dành riêng để lưu trữ ngày và/hoặc thời gian. Thay vào đó, các Hàm Ngày và Giờ tích hợp của SQLite có khả năng lưu trữ ngày và giờ dưới dạng các giá trị VĂN BẢN, THỰC hoặc SỐ
Các ứng dụng có thể chọn lưu trữ ngày và giờ ở bất kỳ định dạng nào trong số này và tự do chuyển đổi giữa các định dạng bằng cách sử dụng chức năng ngày và giờ tích hợp Các công cụ cơ sở dữ liệu SQL sử dụng kiểu gõ cứng nhắc thường sẽ cố gắng tự động chuyển đổi các giá trị thành kiểu dữ liệu thích hợp. Xem xét điều này CREATE TABLE t1(a INT, b VARCHAR(10)); INSERT INTO t1(a,b) VALUES('123',456); Cơ sở dữ liệu được gõ cứng nhắc sẽ chuyển đổi chuỗi '123' thành số nguyên 123 và số nguyên 456 thành chuỗi '456' trước khi thực hiện thao tác chèn Để tối đa hóa khả năng tương thích giữa SQLite và các công cụ cơ sở dữ liệu khác, đồng thời để ví dụ trên sẽ hoạt động trên SQLite giống như trên các công cụ cơ sở dữ liệu SQL khác, SQLite hỗ trợ khái niệm "mối quan hệ kiểu" trên các cột. Mối quan hệ loại của một cột là loại được khuyến nghị cho dữ liệu được lưu trữ trong cột đó. Ý tưởng quan trọng ở đây là loại được khuyến nghị, không bắt buộc. Bất kỳ cột nào vẫn có thể lưu trữ bất kỳ loại dữ liệu nào. Chỉ là một số cột, được lựa chọn, sẽ thích sử dụng một lớp lưu trữ hơn một lớp lưu trữ khác. Lớp lưu trữ ưa thích cho một cột được gọi là "mối quan hệ" của nó Mỗi cột trong cơ sở dữ liệu SQLite 3 được gán một trong các kiểu tương đồng sau
(Ghi chú lịch sử. Mối quan hệ loại "BLOB" từng được gọi là "KHÔNG". Nhưng thuật ngữ đó rất dễ nhầm lẫn với "không có mối quan hệ" và vì vậy nó đã được đổi tên thành. ) Một cột có mối quan hệ TEXT lưu trữ tất cả dữ liệu bằng cách sử dụng các lớp lưu trữ NULL, TEXT hoặc BLOB. Nếu dữ liệu số được chèn vào một cột có mối quan hệ TEXT, nó sẽ được chuyển đổi thành dạng văn bản trước khi được lưu trữ Một cột có ái lực NUMERIC có thể chứa các giá trị sử dụng tất cả năm lớp lưu trữ. Khi dữ liệu văn bản được chèn vào cột NUMERIC, lớp lưu trữ của văn bản được chuyển đổi thành INTEGER hoặc REAL (theo thứ tự ưu tiên) nếu văn bản tương ứng là số nguyên hoặc số thực được định dạng tốt. Nếu giá trị TEXT là một số nguyên được định dạng tốt, quá lớn để vừa với số nguyên có dấu 64 bit, thì nó sẽ được chuyển đổi thành REAL. Đối với các chuyển đổi giữa các lớp lưu trữ VĂN BẢN và THỰC, chỉ 15 chữ số thập phân có nghĩa đầu tiên của số được giữ lại. Nếu giá trị TEXT không phải là số nguyên hoặc ký tự thực được định dạng tốt, thì giá trị đó được lưu dưới dạng TEXT. Đối với mục đích của đoạn này, các chữ số nguyên thập lục phân không được coi là định dạng tốt và được lưu trữ dưới dạng TEXT. (Điều này được thực hiện để tương thích lịch sử với các phiên bản SQLite trước phiên bản 3. 8. 6 2014-08-15 nơi các số nguyên thập lục phân lần đầu tiên được đưa vào SQLite. ) Nếu một giá trị dấu phẩy động có thể được biểu diễn chính xác dưới dạng số nguyên được chèn vào một cột có ái lực SỐ, thì giá trị đó được chuyển đổi thành số nguyên. Không có nỗ lực nào được thực hiện để chuyển đổi các giá trị NULL hoặc BLOB Một chuỗi có thể trông giống như một ký tự dấu chấm động với dấu thập phân và/hoặc ký hiệu số mũ nhưng miễn là giá trị có thể được biểu thị dưới dạng số nguyên, mối quan hệ NUMERIC sẽ chuyển đổi nó thành số nguyên. Do đó, chuỗi '3. 0e+5' được lưu trữ trong một cột có ái lực NUMERIC là số nguyên 300000, không phải là giá trị dấu phẩy động 300000. 0 Cột sử dụng mối quan hệ INTEGER hoạt động giống như cột có mối quan hệ SỐ. Sự khác biệt giữa mối quan hệ INTEGER và NUMERIC chỉ rõ ràng trong biểu thức CAST. Biểu thức "CAST(4. 0 AS INT)" trả về một số nguyên 4, trong khi "CAST(4. 0 AS NUMERIC)" để lại giá trị dưới dạng dấu phẩy động 4. 0 Một cột có ái lực REAL hoạt động giống như một cột có ái lực NUMERIC ngoại trừ việc nó buộc các giá trị nguyên thành biểu diễn dấu phẩy động. (Là một tối ưu hóa nội bộ, các giá trị dấu phẩy động nhỏ không có thành phần phân số và được lưu trữ trong các cột có ái lực THỰC được ghi vào đĩa dưới dạng số nguyên để chiếm ít dung lượng hơn và được tự động chuyển đổi trở lại thành dấu phẩy động khi giá trị được đọc ra. Sự tối ưu hóa này hoàn toàn vô hình ở cấp độ SQL và chỉ có thể được phát hiện bằng cách kiểm tra các bit thô của tệp cơ sở dữ liệu. ) Một cột có mối quan hệ BLOB không ưu tiên lớp lưu trữ này hơn lớp lưu trữ khác và không có nỗ lực nào được thực hiện để ép buộc dữ liệu từ lớp lưu trữ này sang lớp lưu trữ khác 3. 1. Xác định ái lực của cộtĐối với các bảng không được khai báo là STRICT, mối quan hệ của một cột được xác định bởi loại cột đã khai báo, theo các quy tắc sau theo thứ tự được hiển thị
Lưu ý rằng thứ tự của các quy tắc để xác định ái lực cột là quan trọng. Một cột có loại được khai báo là "CHARINT" sẽ khớp với cả quy tắc 1 và 2 nhưng quy tắc đầu tiên được ưu tiên và do đó mối quan hệ của cột sẽ là INTEGER 3. 1. 1. Ví dụ về tên sở thíchBảng sau đây cho biết có bao nhiêu tên kiểu dữ liệu phổ biến từ các triển khai SQL truyền thống hơn được chuyển đổi thành các mối quan hệ theo năm quy tắc của phần trước. Bảng này chỉ hiển thị một tập con nhỏ các tên kiểu dữ liệu mà SQLite sẽ chấp nhận. Lưu ý rằng các đối số số trong ngoặc đơn theo sau tên loại (ví dụ:. "VARCHAR(255)") bị SQLite bỏ qua - SQLite không áp đặt bất kỳ giới hạn độ dài nào (ngoài giới hạn SQLITE_MAX_LENGTH toàn cầu lớn) về độ dài của chuỗi, BLOB hoặc giá trị số Tên kiểu chữ mẫu từ Lưu ý rằng một loại "ĐIỂM NỔI" được khai báo sẽ mang lại mối quan hệ INTEGER, không phải mối quan hệ THỰC, do "INT" ở cuối "POINT". Và loại "CHUỖI" đã khai báo có ái lực là SỐ chứ không phải VĂN BẢN 3. 2. Affinity Of ExpressionsMỗi cột trong bảng có một mối quan hệ loại (một trong BLOB, TEXT, INTEGER, REAL hoặc NUMERIC) nhưng các biểu thức không nhất thiết phải có một mối quan hệ Mối quan hệ biểu hiện được xác định bởi các quy tắc sau
3. 3. Mối quan hệ của cột đối với lượt xem và truy vấn phụCác "cột" của truy vấn con VIEW hoặc mệnh đề TỪ thực sự là các biểu thức trong tập kết quả của câu lệnh SELECT thực thi VIEW hoặc truy vấn con. Do đó, mối quan hệ đối với các cột của CHẾ ĐỘ XEM hoặc truy vấn con được xác định theo quy tắc mối quan hệ biểu thức ở trên. Hãy xem xét một ví dụ CREATE TABLE t1(a INT, b TEXT, c REAL); CREATE VIEW v1(x,y,z) AS SELECT b, a+c, 42 FROM t1 WHERE b!=11; Mối quan hệ của v1. cột x sẽ giống như ái lực của t1. b (TEXT), kể từ v1. x ánh xạ trực tiếp vào t1. b. Nhưng cột v1. y và v1. cả z đều không có ái lực, vì các cột đó ánh xạ vào biểu thức a+c và 42, và các biểu thức luôn không có ái lực 3. 3. 1. Mối quan hệ của cột đối với các chế độ xem phức hợpKhi câu lệnh CHỌN triển khai truy vấn con mệnh đề XEM hoặc mệnh đề TỪ là một CHỌN phức hợp thì mối quan hệ của mỗi cột của CHỌN XEM hoặc truy vấn con sẽ là mối quan hệ của cột kết quả tương ứng đối với một trong các câu lệnh CHỌN riêng lẻ tạo nên mối quan hệ đó. Tuy nhiên, không xác định được câu lệnh CHỌN nào sẽ được sử dụng để xác định mối quan hệ. Các câu lệnh SELECT thành phần khác nhau có thể được sử dụng để xác định mối quan hệ tại các thời điểm khác nhau trong quá trình đánh giá truy vấn. Lựa chọn có thể khác nhau giữa các phiên bản SQLite khác nhau. Lựa chọn có thể thay đổi giữa một truy vấn và truy vấn tiếp theo trong cùng một phiên bản SQLite. Lựa chọn có thể khác nhau vào những thời điểm khác nhau trong cùng một truy vấn. Do đó, bạn không bao giờ có thể chắc chắn mối quan hệ nào sẽ được sử dụng cho các cột của tổ hợp CHỌN có mối quan hệ khác nhau trong truy vấn con cấu thành Cách tốt nhất là tránh trộn lẫn các mối quan hệ trong một hợp chất CHỌN nếu bạn quan tâm đến kiểu dữ liệu của kết quả. Trộn các mối quan hệ trong một hợp chất CHỌN có thể dẫn đến kết quả đáng ngạc nhiên và không trực quan. Ví dụ, xem bài đăng trên diễn đàn 02d7be94d7 3. 4. Ví dụ về hành vi mối quan hệ của cộtSQL sau minh họa cách SQLite sử dụng mối quan hệ cột để thực hiện chuyển đổi kiểu khi các giá trị được chèn vào bảng CREATE TABLE t1( t TEXT, -- text affinity by rule 2 nu NUMERIC, -- numeric affinity by rule 5 i INTEGER, -- integer affinity by rule 1 r REAL, -- real affinity by rule 4 no BLOB -- no affinity by rule 3 ); -- Values stored as TEXT, INTEGER, INTEGER, REAL, TEXT. INSERT INTO t1 VALUES('500.0', '500.0', '500.0', '500.0', '500.0'); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; text|integer|integer|real|text -- Values stored as TEXT, INTEGER, INTEGER, REAL, REAL. DELETE FROM t1; INSERT INTO t1 VALUES(500.0, 500.0, 500.0, 500.0, 500.0); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; text|integer|integer|real|real -- Values stored as TEXT, INTEGER, INTEGER, REAL, INTEGER. DELETE FROM t1; INSERT INTO t1 VALUES(500, 500, 500, 500, 500); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; text|integer|integer|real|integer -- BLOBs are always stored as BLOBs regardless of column affinity. DELETE FROM t1; INSERT INTO t1 VALUES(x'0500', x'0500', x'0500', x'0500', x'0500'); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; blob|blob|blob|blob|blob -- NULLs are also unaffected by affinity DELETE FROM t1; INSERT INTO t1 VALUES(NULL,NULL,NULL,NULL,NULL); SELECT typeof(t), typeof(nu), typeof(i), typeof(r), typeof(no) FROM t1; null|null|null|null|null SQLite version 3 has the usual set of SQL comparison operators including "=", "==", "<", "<=", ">", ">=", "!=", "", "IN", "NOT IN", "BETWEEN", "IS", and "IS NOT", . 4. 1. Thứ tự sắp xếpKết quả so sánh phụ thuộc vào các lớp lưu trữ của toán hạng, theo các quy tắc sau
4. 2. Loại chuyển đổi trước khi so sánhSQLite có thể thử chuyển đổi giá trị giữa các lớp lưu trữ INTEGER, REAL và/hoặc TEXT trước khi thực hiện so sánh. Việc có hay không bất kỳ chuyển đổi nào được thử trước khi so sánh diễn ra tùy thuộc vào mối quan hệ loại của toán hạng Để "áp dụng mối quan hệ" có nghĩa là chuyển đổi một toán hạng thành một lớp lưu trữ cụ thể khi và chỉ khi việc chuyển đổi không làm mất thông tin cần thiết. Các giá trị số luôn có thể được chuyển đổi thành TEXT. Các giá trị TEXT có thể được chuyển đổi thành các giá trị số nếu nội dung văn bản là một số nguyên hoặc ký tự thực được định dạng tốt, nhưng không phải là một ký tự số nguyên thập lục phân. Các giá trị BLOB được chuyển đổi thành các giá trị TEXT bằng cách diễn giải đơn giản nội dung BLOB nhị phân dưới dạng một chuỗi văn bản trong mã hóa cơ sở dữ liệu hiện tại Mối quan hệ được áp dụng cho toán hạng của toán tử so sánh trước khi so sánh theo các quy tắc sau theo thứ tự được hiển thị
Biểu thức "a GIỮA b VÀ c" được coi là hai phép so sánh nhị phân riêng biệt "a >= b VÀ a <= c", ngay cả khi điều đó có nghĩa là các mối quan hệ khác nhau được áp dụng cho 'a' trong mỗi phép so sánh. Chuyển đổi kiểu dữ liệu trong so sánh có dạng "x IN (SELECT y. )" được xử lý như thể phép so sánh thực sự là "x=y". Biểu thức "a IN (x, y, z,. )" tương đương với "a = +x HOẶC a = +y HOẶC a = +z HOẶC. ". Nói cách khác, các giá trị ở bên phải của toán tử IN (các giá trị "x", "y" và "z" trong ví dụ này) được coi là không có ái lực, ngay cả khi chúng là giá trị cột hoặc biểu thức CAST 4. 3. Ví dụ so sánhCREATE TABLE t1( a TEXT, -- text affinity b NUMERIC, -- numeric affinity c BLOB, -- no affinity d -- no affinity ); -- Values will be stored as TEXT, INTEGER, TEXT, and INTEGER respectively INSERT INTO t1 VALUES('500', '500', '500', 500); SELECT typeof(a), typeof(b), typeof(c), typeof(d) FROM t1; text|integer|text|integer -- Because column "a" has text affinity, numeric values on the -- right-hand side of the comparisons are converted to text before -- the comparison occurs. SELECT a < 40, a < 60, a < 600 FROM t1; 0|1|1 -- Text affinity is applied to the right-hand operands but since -- they are already TEXT this is a no-op; no conversions occur. SELECT a < '40', a < '60', a < '600' FROM t1; 0|1|1 -- Column "b" has numeric affinity and so numeric affinity is applied -- to the operands on the right. Since the operands are already numeric, -- the application of affinity is a no-op; no conversions occur. All -- values are compared numerically. SELECT b < 40, b < 60, b < 600 FROM t1; 0|0|1 -- Numeric affinity is applied to operands on the right, converting them -- from text to integers. Then a numeric comparison occurs. SELECT b < '40', b < '60', b < '600' FROM t1; 0|0|1 -- No affinity conversions occur. Right-hand side values all have -- storage class INTEGER which are always less than the TEXT values -- on the left. SELECT c < 40, c < 60, c < 600 FROM t1; 0|0|0 -- No affinity conversions occur. Values are compared as TEXT. SELECT c < '40', c < '60', c < '600' FROM t1; 0|1|1 -- No affinity conversions occur. Right-hand side values all have -- storage class INTEGER which compare numerically with the INTEGER -- values on the left. SELECT d < 40, d < 60, d < 600 FROM t1; 0|0|1 -- No affinity conversions occur. INTEGER values on the left are -- always less than TEXT values on the right. SELECT d < '40', d < '60', d < '600' FROM t1; 1|1|1 All of the results in the example are the same if the comparisons are commuted - if expressions of the form "a<40" are rewritten as "40>a". Mathematical operators (+, -, *, /, %, <<, >>, &, and |) interpret both operands as if they were numbers. STRING or BLOB operands automatically convert into REAL or INTEGER values. If the STRING or BLOB looks like a real number (if it has a decimal point or an exponent) or if the value is outside the range that can be represented as a 64-bit signed integer, then it converts to REAL. Otherwise the operand converts to INTEGER. The implied type conversion of mathematical operands is slightly different from CAST to NUMERIC in that string and BLOB values that look like real numbers but have no fractional part are kept as REAL instead of being converted into INTEGER as they would be for CAST to NUMERIC. The conversion from STRING or BLOB into REAL or INTEGER is performed even if it is lossy and irreversible. Some mathematical operators (%, <<, >>, &, and |) expect INTEGER operands. For those operators, REAL operands are converted into INTEGER in the same way as a CAST to INTEGER. The <<, >>, &, and | operators always return an INTEGER (or NULL) result, but the % operator returns either INTEGER or REAL (or NULL) depending on the type of its operands. A NULL operand on a mathematical operator yields a NULL result. An operand on a mathematical operator that does not look in any way numeric and is not NULL is converted to 0 or 0.0. Division by zero gives a result of NULL. Khi kết quả truy vấn được sắp xếp theo mệnh đề ORDER BY, các giá trị có lớp lưu trữ NULL sẽ xuất hiện trước, tiếp theo là các giá trị INTEGER và REAL được xen kẽ theo thứ tự số, tiếp theo là các giá trị TEXT theo thứ tự đối chiếu và cuối cùng là các giá trị BLOB theo thứ tự memcmp(). Không có chuyển đổi lớp lưu trữ xảy ra trước khi sắp xếp Khi nhóm các giá trị với mệnh đề GROUP BY, các giá trị với các lớp lưu trữ khác nhau được coi là khác biệt, ngoại trừ các giá trị INTEGER và REAL được coi là bằng nhau nếu chúng bằng nhau về số lượng. Không có mối quan hệ nào được áp dụng cho bất kỳ giá trị nào là kết quả của mệnh đề GROUP by Các toán tử SELECT ghép UNION, INTERSECT và EXCEPT thực hiện so sánh ẩn giữa các giá trị. Không có mối quan hệ nào được áp dụng cho các toán hạng so sánh đối với các phép so sánh ẩn được liên kết với UNION, INTERSECT hoặc EXCEPT - các giá trị được so sánh như vốn có Khi SQLite so sánh hai chuỗi, nó sử dụng một trình tự đối chiếu hoặc hàm đối chiếu (hai thuật ngữ cho cùng một thứ) để xác định chuỗi nào lớn hơn hoặc liệu hai chuỗi có bằng nhau không. SQLite có ba chức năng đối chiếu tích hợp. BINARY, NOCASE và RTRIM
Một ứng dụng có thể đăng ký các chức năng đối chiếu bổ sung bằng giao diện sqlite3_create_collation() Các chức năng đối chiếu chỉ quan trọng khi so sánh các giá trị chuỗi. Các giá trị số luôn được so sánh bằng số và BLOB luôn được so sánh theo từng byte bằng memcmp() 7. 1. Gán các chuỗi đối chiếu từ SQLMỗi cột của mỗi bảng có một chức năng đối chiếu được liên kết. Nếu không có chức năng đối chiếu nào được xác định rõ ràng, thì chức năng đối chiếu sẽ mặc định là BINARY. Mệnh đề COLLATE của định nghĩa cột được sử dụng để xác định các hàm đối chiếu thay thế cho một cột The rules for determining which collating function to use for a binary comparison operator (=, <, >, <=, >=, !=, IS, and IS NOT) are as follows:
Toán hạng của phép so sánh được coi là có phép gán hàm đối chiếu rõ ràng (quy tắc 1 ở trên) nếu bất kỳ biểu thức con nào của toán hạng sử dụng toán tử COLLATE hậu tố. Do đó, nếu toán tử COLLATE được sử dụng ở bất kỳ đâu trong biểu thức so sánh, thì hàm đối chiếu được xác định bởi toán tử đó được sử dụng để so sánh chuỗi bất kể cột bảng nào có thể là một phần của biểu thức đó. Nếu hai hoặc nhiều biểu thức con của toán tử COLLATE xuất hiện ở bất kỳ đâu trong một phép so sánh, thì hàm đối chiếu rõ ràng nhất bên trái sẽ được sử dụng bất kể các toán tử COLLATE được lồng sâu đến mức nào trong biểu thức và bất kể biểu thức được đặt trong ngoặc đơn như thế nào Biểu thức "x GIỮA y và z" về mặt logic tương đương với hai phép so sánh "x >= y AND x <= z" và hoạt động đối với các hàm đối chiếu như thể đó là hai phép so sánh riêng biệt. Biểu thức "x IN (SELECT y. )" được xử lý giống như biểu thức "x = y" nhằm mục đích xác định trình tự đối chiếu. Trình tự đối chiếu được sử dụng cho các biểu thức có dạng "x IN (y, z,. )" là dãy đối chiếu của x. Nếu một trình tự đối chiếu rõ ràng được yêu cầu trên toán tử IN thì nó sẽ được áp dụng cho toán hạng bên trái, như thế này. "x COLLATE nocase IN (y,z,. )" Các điều khoản của mệnh đề ORDER BY là một phần của câu lệnh SELECT có thể được gán một trình tự đối chiếu bằng cách sử dụng toán tử COLLATE, trong trường hợp đó, hàm đối chiếu được chỉ định được sử dụng để sắp xếp. Mặt khác, nếu biểu thức được sắp xếp theo mệnh đề ORDER BY là một cột, thì trình tự đối chiếu của cột được sử dụng để xác định thứ tự sắp xếp. Nếu biểu thức không phải là một cột và không có mệnh đề COLLATE, thì trình tự đối chiếu BINARY được sử dụng 7. 2. Ví dụ về trình tự đối chiếuCác ví dụ bên dưới xác định trình tự đối chiếu sẽ được sử dụng để xác định kết quả so sánh văn bản có thể được thực hiện bởi các câu lệnh SQL khác nhau. Lưu ý rằng có thể không cần so sánh văn bản và không sử dụng trình tự đối chiếu trong trường hợp giá trị số, blob hoặc NULL |