Tôi nghĩ rằng PostgreSQL tự động cố gắng tìm ra loại đằng sau hậu trường và trong Linux, nó cố gắng loại bỏ '', một số so sánh cũng dựa trên ngôn ngữ.
-
Do đó,
' 2' > '10'
trở thành' 2' > '10'
và so sánh là'2'>'1'
; chúng không bằng nhau, vì vậy không cần tiếp tục với phần còn lại của chuỗi vàascii('2')
lớn hơnascii('1')
, vì vậy nó đánh giá là true. -
Nếu đó là một phép toán bình đẳng (ví dụ:'22' ='22 '), nó sẽ dẫn đến sai vì Postgres thực hiện so sánh từng byte. Điều này rất quan trọng vì công cụ sử dụng hai thuật toán khác nhau khi thực hiện so sánh.
-
Nếu bạn chỉ định loại thông qua đánh máy, thì nó sẽ không ghi đè các quy tắc khoảng trắng (
' '=>''
).
Ngoài ra, tín dụng sẽ được chuyển đến: RhodiumToad và Peerce trong #postgresql