PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेएसक्यूएल में बच गए यूनिकोड चरित्र को वास्तविक चरित्र में कनवर्ट करें

एक पुरानी तरकीब इस उद्देश्य के लिए पार्सर का उपयोग कर रही है:

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$

यह काम करता है, लेकिन यह एसक्यूएल इंजेक्शन असुरक्षित है - इसलिए आपको पहले इनपुट टेक्स्ट को साफ करना चाहिए!

यहां कम पठनीय, लेकिन सुरक्षित संस्करण है - लेकिन आपको मैन्युअल रूप से एक चार को एस्केप सिंबल के रूप में निर्दिष्ट करना होगा:

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$

परिणाम

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. टेबल्स और इंडेक्स बनाम एचडीडी और एसएसडी

  2. पोस्टग्रेज में जेनरेटेड वैल्यू

  3. plpgsql फ़ंक्शन में इनपुट सरणी के तत्वों से मेल खाने वाली पंक्तियाँ लौटाएँ

  4. PostgreSQL के साथ सरणी आंतरिक अनुक्रमणिका का उपयोग कैसे करें?

  5. डेटाबेस त्रुटि:वर्तमान लेनदेन निरस्त कर दिया गया है, लेनदेन ब्लॉक के अंत तक आदेशों को अनदेखा कर दिया गया है?