Các ký tự _ và% phải được trích dẫn để khớp theo nghĩa đen trong một câu lệnh LIKE, không có cách nào khác. Lựa chọn là thực hiện phía máy khách hoặc phía máy chủ (thường bằng cách sử dụng SQL Replace (), xem bên dưới). Ngoài ra, để hiểu đúng 100% trong trường hợp chung, có một số điều cần xem xét.
Theo mặc định, ký tự trích dẫn được sử dụng trước _ hoặc% là dấu gạch chéo ngược (\), nhưng nó có thể được thay đổi bằng mệnh đề ESCAPE ngay sau mệnh đề LIKE. Trong mọi trường hợp, ký tự trích dẫn phải được lặp lại hai lần trong mẫu để được so khớp theo nghĩa đen dưới dạng một ký tự.
Ví dụ:... WHERE field like 'john^%node1^^[email protected]%' ESCAPE '^'
sẽ khớp với john%node1^[email protected] theo sau là bất kỳ thứ gì.
Có vấn đề với lựa chọn mặc định của dấu gạch chéo ngược:nó đã được sử dụng cho các mục đích khác khi standard_conforming_strings TẮT (PG 9.1 đã BẬT theo mặc định, nhưng các phiên bản trước vẫn đang được sử dụng rộng rãi, đây là một điểm cần xem xét).
Ngoài ra, nếu việc trích dẫn cho ký tự đại diện LIKE được thực hiện ở phía máy khách trong tình huống nhập liệu của người dùng, thì nó ngoài đối với trích dẫn chuỗi thông thường đã cần thiết khi người dùng nhập.
Xem qua ví dụ go-pgsql cho biết rằng nó sử dụng trình giữ chỗ kiểu $ N cho các biến ... Vì vậy, đây là một nỗ lực để viết nó theo một cách nào đó chung chung:nó hoạt động với standard_conforming_strings cả BẬT hoặc TẮT, sử dụng thay thế phía máy chủ của [% _], một ký tự trích dẫn thay thế, trích dẫn của ký tự trích dẫn và tránh chèn sql:
db.Query("SELECT * from USERS where name like replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'",
variable_user_input);