<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.livemallorcahostel.com:华亭县| www.huangshouqi.com:牡丹江市| www.artpairs.com:五大连池市| www.boboschinesedeli.com:铅山县| www.cjcfootball.com:大安市| www.bjbthj.com:汉中市| www.tiehimup.com:隆德县| www.zainvista.com:聂拉木县| www.137170.com:八宿县| www.mdprowash.com:孝感市| www.ltswordpress.com:梅州市| www.sandillc.com:福清市| www.hg62456.com:宁德市| www.yalifirini.com:双江| www.023chbg.com:尼玛县| www.1663pj.com:张家港市| www.xijiufuheban.com:米脂县| www.taynelemon.com:伊川县| www.jjyjs.com:托里县| www.lapakpoker.org:阳山县| www.shannonrenfrew.com:青阳县| www.qdnlmw.com:长汀县| www.xianghongdian.com:碌曲县| www.ylsqsly.com:改则县| www.baikalwaves.com:满城县| www.aetosz.com:长岭县| www.paulovarelahairspace.com:高州市| www.78iis.com:汨罗市| www.idleclickinggames.com:修文县| www.cgkdw.cn:蓬溪县| www.chateaudumarteray.com:潼南县| www.kinghgw.com:江源县| www.busybeesflorist.com:夏津县| www.gw336.com:新竹市| www.tw-graphics.com:黄龙县| www.guggamugga.com:星子县| www.zjoydq.com:岫岩| www.concreteinanyform.com:庆云县| www.xawydz.com:昭觉县| www.178host.com:华安县| www.idleclickinggames.com:陇西县| www.hg89456.com:高碑店市| www.jh0oxs.com:扶余县| www.hangangcamp.com:马尔康县| www.zdrowienatalerzu.com:唐山市| www.hg19345.com:乌海市| www.artearredofiorita.com:湘潭市| www.ink4arteurope.com:岚皋县| www.preciosmadrid.com:原平市| www.classes2go.com:伊川县| www.hxmsk.com:敦化市| www.theonlynetwork.com:隆昌县| www.amoura2.com:德化县| www.youthsportsfinder.com:东乌珠穆沁旗| www.svoidom.org:丹凤县| www.nest180.com:佛山市| www.headsion.cn:高邑县| www.muslimkitapp.com:永川市| www.cognaso.com:文水县| www.fisting-tube.com:西宁市| www.208650.com:马鞍山市| www.cgkdw.cn:福泉市| www.xfkqf.com:永昌县| www.plastic-cn.com:丰城市| www.hbccp.com:监利县| www.searchvidz.com:镇原县| www.hbjtls.com:澄城县| www.mhcoelho.com:桃园市| www.aureliogonzalez.com:邯郸市| www.firmarehberisitesi.com:呼玛县| www.altoconhecimento.com:崇明县| www.lsyqsm.com:宝坻区| www.itsagreed.com:沾益县| www.evilalchemist.com:修文县| www.liyoujiaju.com:桑植县| www.hg89456.com:繁峙县| www.craigsroyal.com:锡林郭勒盟| www.5itours.com:河津市| www.cloudhostingcity.com:加查县| www.blgzs88.com:阜南县| www.cncddc.com:黄陵县| www.wunderkind56dvoek.net:建平县| www.dmcpy.com:瑞昌市| www.1shoupifa.com:江达县|