Chuỗi ký tự
Thoát khỏi dấu ngoặc kép '
bằng cách nhân đôi chúng lên -> ''
là cách tiêu chuẩn và tất nhiên là hoạt động:
'user's log' -- incorrect syntax (unbalanced quote)
'user''s log'
Dấu ngoặc kép đơn thuần (ASCII / UTF-8 mã 39), lưu ý bạn, không phải dấu ngoặc kép `
, không có mục đích đặc biệt trong Postgres (không giống như một số RDBMS khác) và không phải là dấu ngoặc kép "
, được sử dụng cho số nhận dạng.
Trong các phiên bản cũ hoặc nếu bạn vẫn chạy với standard_conforming_strings = off
hoặc nói chung, nếu bạn thêm vào trước chuỗi của mình bằng E
để khai báo Cú pháp chuỗi thoát Posix , bạn cũng có thể thoát bằng dấu gạch chéo ngược \
:
E'user\'s log'
Dấu gạch chéo ngược chính nó được thoát bằng một dấu gạch chéo ngược khác. Nhưng điều đó nói chung là không thích hợp.
Nếu bạn phải xử lý nhiều dấu ngoặc kép hoặc nhiều lớp thoát, bạn có thể tránh trích dẫn địa ngục trong PostgreSQL bằng chuỗi được trích dẫn bằng đô la :
'escape '' with '''''
$$escape ' with ''$$
Để tránh nhầm lẫn giữa các dấu ngoặc kép, hãy thêm một mã thông báo duy nhất vào mỗi cặp:
$token$escape ' with ''$token$
Có thể được lồng vào bất kỳ số cấp nào:
$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$
Hãy chú ý nếu $
ký tự phải có ý nghĩa đặc biệt trong phần mềm máy khách của bạn. Ngoài ra, bạn có thể phải thoát khỏi nó. Đây không phải là trường hợp của các ứng dụng khách PostgreSQL tiêu chuẩn như psql hoặc pgAdmin.
Điều đó rất hữu ích cho việc viết các hàm plpgsql hoặc các lệnh SQL đặc biệt. Tuy nhiên, nó không thể giảm bớt nhu cầu sử dụng các câu lệnh đã chuẩn bị sẵn hoặc một số phương pháp khác để bảo vệ chống lại việc đưa SQL vào ứng dụng của bạn khi có thể có người dùng nhập. @ Craig của câu trả lời có nhiều hơn về điều đó. Thêm chi tiết:
- Chèn SQL vào các hàm Postgres so với các truy vấn đã chuẩn bị trước
Giá trị bên trong Postgres
Khi xử lý các giá trị bên trong cơ sở dữ liệu, có một số chức năng hữu ích để trích dẫn các chuỗi một cách chính xác:
-
quote_literal()
hoặcquote_nullable()
- phần sau xuất ra chuỗiNULL
cho đầu vào null. (Ngoài ra còn cóquote_ident()
thành dấu ngoặc kép các chuỗi khi cần thiết để nhận được số nhận dạng hợp lệ của SQL .) -
format()
với mã định dạng%L
tương đương vớiquote_nullable()
.
Như:format('%L', string_var)
-
concat()
concat_ws()