Saya pikir PostgreSQL secara otomatis mencoba mencari tahu tipe di balik layar dan di Linux ia mencoba menghilangkan tanda ' ', beberapa perbandingan juga didasarkan pada lokal.
-
Jadi,
' 2' > '10'
menjadi'2'>'10'
dan perbandingannya adalah'2'>'1'
; mereka tidak sama, jadi tidak perlu melanjutkan dengan sisa string, danascii('2')
lebih besar dariascii('1')
, sehingga bernilai benar. -
Jika itu adalah operasi kesetaraan (mis. ' 22' ='22 ') itu akan menghasilkan false karena Postgres melakukan perbandingan byte demi byte. Ini penting karena mesin menggunakan dua algoritme yang berbeda saat melakukan perbandingan.
-
Jika Anda menentukan jenis melalui typecasting, maka itu tidak akan menimpa aturan spasi (
' '=>''
).
Juga kredit diberikan kepada: RhodiumToad dan Peerce di #postgresql