<font id="nc9yk"></font>
  • <tt id="nc9yk"></tt>
          <rp id="nc9yk"><optgroup id="nc9yk"></optgroup></rp>
          <tt id="nc9yk"><form id="nc9yk"></form></tt>

            <cite id="nc9yk"></cite>

            PostgreSQL去掉表中所有不可見字符的操作

             更新時間:2020年12月29日 15:17:01   作者:asin929  
            這篇文章主要介紹了PostgreSQL去掉表中所有不可見字符的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

            問題描述

            數據庫中的某些數據中包含了某些不可見字符。ASCII碼中的0-31,127屬于控制字符,不可見。

            這些不可見字符往往是不需要的,我們要想辦法刪除它。

            解決辦法

            寫一函數,將所有字段中的不可見字符替換為空格。

            測試流程

            環境準備

            建表,并插入帶不可見字符的記錄。注:下列數據中的不可見字符在粘貼過來的時候自動去掉了,請按ALT+數字鍵加入。

            CREATE TABLE public.test_table
            (
            
             xm character varying(50),
             pinyin character varying(200),
             sm character(15)
            )
            WITH (
             OIDS=FALSE
            );
            ALTER TABLE public.test_table
             OWNER TO postgres;
            
            
            -- ----------------------------
            -- Records of test_table
            -- ----------------------------
            INSERT INTO ry_syrk_copy VALUES ('周小星xx', 'xx測試','測試' );
            INSERT INTO ry_syrk_copy VALUES ('李華', '測試xx','世xx界' );
            

            注:因不可見字符無法在CSDN中無法打出,故用xx代替。實際上在其它地方可以用ALT+數字鍵打印出來。

            去掉表中所有的不可見字符

            -- 函數說明:將表test_table中所有的不可見字符替換掉
            CREATE OR REPLACE FUNCTION delete_special_char() RETURNS int8 AS $$
            DECLARE
             row RECORD;  
            BEGIN
            
            -- 查詢表中所有類型為字符串的列
            FOR row in select column_name from information_schema.columns where table_name = 'test_table' and data_type like 'character%' LOOP 
             FOR i IN 1..31 LOOP --替換所有的不可見字符為空格(除了chr(0)之外)
              EXECUTE 'update test_table set ' || row.column_name || ' = replace(' || row.column_name || ', chr(' || i || '), '' '' )';
             END LOOP;   
            END LOOP;
            
            RETURN 1;
            
            END;
            
            $$ LANGUAGE plpgsql;
            

            執行函數

            執行函數–select * from delete_special_char(),之后查看表數據,所有的不可見字符都被替換為空格。

            補充–如何刪除chr(0)

            值得注意的是上述函數并不能刪除chr(0)的不可見字符,見如下測試。

            但oracle中上述語句卻可以成功執行,下面我就來講一講吧~

            Oracle中varchar2字段的不可見字符處理

            在以前的項目中,曾經出現加密后的字符串數據丟失,加密內容無法正常解密的情況,經查找原因,發現是數據庫表的varchar2字段中有chr(0)的不可見字符(即我們通常所說的\0),當出現這種情況時,由于java和c++中對字符串處理的不同,將會導致所取得的字符串長度不同。

            在java中,字符串的長度可以通過取字符串的字節數組來獲得,這樣得到的字符串長度為字符串實際的大小(漢字2個字節,其他1個字節);在c++中通過strlen函數獲得的字符串長度為第一個字節\0之前的字符長度。

            當我們在編寫jni的時候,經常會遇到將java的字符串轉換為c++中的字符串的情況,這樣,當java中的字符串包含\0的空字節時,在對c++轉換后的字符串求取長度時,不要使用strlen函數,否則,其僅僅對\0字節之前的內容求取長度,與實際大小不同。

            解決該類問題,根據所屬應用的不同,可通過三種手段解決:

            在數據庫層解決:

            Oracle數據庫中,可在查詢語句中使用函數replace來去除字符串中的非可見字符,例如:

            select replace(content,chr(0),null) from bossquery_request where sky_command = '02';

            以后大家如果遇到類似情況,可通過replace(字段名,chr(ASCII碼值),null)來去掉其中對應的ASCII碼值的字符。

            在java程序中解決:

            在java程序中,大家可通過獲取String對象的所有字節內容,對字節內容進行掃描,來去掉其中不需要的字節。

            在JNI層解決:

            在JNI層解決該問題的方式是,不要使用strlen函數來獲取字符串長度,可通過GetArrayLength取字節數組長度函數或者其他類似函數來獲取字符串長度,則可避免該情況發生。

            以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

            相關文章

            • PostgreSQL實現批量插入、更新與合并操作的方法

              PostgreSQL實現批量插入、更新與合并操作的方法

              這篇文章主要給大家介紹了關于PostgreSQL實現批量插入、更新與合并操作的相關資料,文中通過圖文以及示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
              2019-02-02
            • SQLite教程(七):數據類型詳解

              SQLite教程(七):數據類型詳解

              這篇文章主要介紹了SQLite教程(七):數據類型詳解,本文講解了存儲種類和數據類型、類型親緣性、比較表達式、操作符等內容,需要的朋友可以參考下
              2015-05-05
            • Postgre數據庫Insert 、Query性能優化詳解

              Postgre數據庫Insert 、Query性能優化詳解

              這篇文章主要介紹了Postgre數據庫Insert和Query性能優化的步驟,大家可以參考使用
              2013-11-11
            • PostgreSQL pg_ctl start啟動超時實例分析

              PostgreSQL pg_ctl start啟動超時實例分析

              這篇文章主要給大家介紹了關于PostgreSQL pg_ctl start啟動超時的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
              2019-01-01
            • Linux CentOS 7源碼編譯安裝PostgreSQL9.5

              Linux CentOS 7源碼編譯安裝PostgreSQL9.5

              這篇文章主要為大家詳細介紹了Linux CentOS 7源碼編譯安裝PostgreSQL9.5的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
              2016-11-11
            • PostgreSQL數據庫事務實現方法分析

              PostgreSQL數據庫事務實現方法分析

              這篇文章主要介紹了PostgreSQL數據庫事務實現方法,簡單講述了事務的概念、功能,并結合實例形式分析了PostgreSQL數據庫事務的定義方法及相關注意事項,需要的朋友可以參考下
              2018-08-08
            • PostgreSQL中使用數組改進性能實例代碼

              PostgreSQL中使用數組改進性能實例代碼

              這篇文章主要給大家介紹了關于PostgreSQL中使用數組改進性能的相關資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
              2018-12-12
            • PostgreSQL樹形結構的遞歸查詢示例

              PostgreSQL樹形結構的遞歸查詢示例

              這篇文章主要給大家介紹了關于PostgreSQL樹形結構的遞歸查詢的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用PostgreSQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
              2019-05-05
            • 詳解PostgreSql數據庫對象信息及應用

              詳解PostgreSql數據庫對象信息及應用

              這篇文章主要介紹了PostgreSql數據庫對象信息及應用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
              2020-12-12
            • PostgreSQL之pgdump備份恢復操作

              PostgreSQL之pgdump備份恢復操作

              這篇文章主要介紹了PostgreSQL之pgdump備份恢復操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
              2020-12-12

            最新評論

            hao500彩票 www.carakesehatan.com:德惠市| www.loupanvip.com:疏勒县| www.xrwjw.cn:博罗县| www.safecarservice.com:巴青县| www.troop199fishers.com:马龙县| www.fm556.com:龙岩市| www.beverlysteelasia.com:团风县| www.tekirotools.com:普陀区| www.anotherspace2.com:措勤县| www.xvideogaytube.com:鹤峰县| www.germanincubator.net:静海县| www.am9911.com:濉溪县| www.andrewcambron.com:南木林县| www.dywanliqizhong.com:齐河县| www.bin-heart.com:重庆市| www.gxdingyang.cn:元氏县| www.xhjsw.cn:望都县| www.tlhsny.com:杂多县| www.jinjunepet.com:定安县| www.xxjxzz.com:偃师市| www.getallsites.com:南安市| www.xuanfengling.com:同江市| www.taralynnfoxxblog.com:惠安县| www.maksoyun.com:武定县| www.101ddsnappers.com:随州市| www.ccshcy.com:斗六市| www.henglian-sh.com:盈江县| www.estadonacionalespanol.com:措美县| www.pd556.com:洪泽县| www.cdxufeng.com:闻喜县| www.jnddq.com:海盐县| www.healtheworldtour.org:西和县| www.greenvocational.com:福鼎市| www.heeeun.com:桑植县| www.impobol.com:布尔津县| www.nederlandsefilms.com:扎鲁特旗| www.wpudining.com:龙游县| www.tzdqw.com:宿迁市| www.0735qy.com:唐山市| www.xajsmy.com:黔南| www.huidenhd.com:绥中县| www.nedges.com:西宁市| www.taynelemon.com:合江县| www.orodfish.com:海宁市| www.kagithanecicekci.com:乌拉特前旗| www.ywijx.com:博湖县| www.theonlynetwork.com:佛山市| www.votextile.com:博野县| www.zjyoushun.com:牟定县| www.jpi-py.com:通榆县| www.zydlgzdw.com:江津市| www.jnshengping.com:沾化县| www.yongtaikym.com:罗平县| www.jlxkc.com:阿城市| www.wazww.com:新余市| www.selailai.com:民勤县| www.855664.com:文化| www.songzhixiang.com:金华市| www.catchyenough.com:莱西市| www.nadabula.com:开封市| www.13425690000.com:鄢陵县| www.hzqbsjz.com:阳东县| www.dictionarios.com:民权县| www.caitaocongtrinh.com:临颍县| www.tearway.com:潞城市| www.222qa.com:宜良县| www.asmyachtsigns.com:高州市| www.agrinafta.com:麻阳| www.823352.com:濉溪县| www.tabletite.com:青海省| www.autoinsurancebuyersguide.com:文昌市| www.meiyizhuangshi.com:安国市| www.calismdmrxonline.com:青海省| www.ttjm6898lsc.com:孝义市| www.slclong.com:南漳县| www.uniquemicrofinance.com:赤城县| www.aeul-subs.com:卢湾区| www.yzbux.com:德安县| www.rightics.com:万盛区| www.52mjnf.com:青川县| www.bestpriceditemz.com:石河子市| www.315cxppwlx.com:柞水县| www.kdtlw.cn:农安县| www.beckymoe.com:上犹县|