PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Ubah karakter Unicode yang lolos kembali ke karakter sebenarnya di PostgreSQL

Salah satu trik lama menggunakan parser untuk tujuan ini:

postgres=# select e'Telefon\u00ED kontakty';
     ?column?      
-------------------
 Telefoní kontakty
(1 row)

CREATE OR REPLACE FUNCTION public.unescape(text)
RETURNS text
LANGUAGE plpgsql
AS $function$
DECLARE result text;
BEGIN
  EXECUTE format('SELECT e''%s''', $1) INTO result;
  RETURN result;
END;
$function$

Ini berfungsi, tetapi rentan terhadap injeksi SQL - jadi Anda harus membersihkan teks input terlebih dahulu!

Ini versi yang kurang dapat dibaca, tetapi aman - tetapi Anda harus secara manual menentukan satu karakter sebagai simbol pelarian:

CREATE OR REPLACE FUNCTION public.unescape(text, text) 
 RETURNS text
 LANGUAGE plpgsql
 AS $function$
 DECLARE result text;
 BEGIN
   EXECUTE format('SELECT U&%s UESCAPE %s', 
                         quote_literal(replace($1, '\u','^')),
                         quote_literal($2)) INTO result;
   RETURN result;
 END;
 $function$

Hasil

postgres=# select unescape('Odpov\u011Bdn\u00E1 osoba','^');
    unescape     
-----------------
 Odpovědná osoba
(1 row)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Melarikan diri dari nama kolom seperti kata kunci di Postgres

  2. Instal PL/Java 1.5.2 di PostgreSQL 11

  3. Grup SQL berdasarkan Rentang Tanggal

  4. Mengapa sebaiknya menyimpan nomor telepon sebagai string vs. integer?

  5. Cara Mengonfigurasi Replikasi Cluster-to-Cluster untuk PostgreSQL