<rp id="kut09"><nav id="kut09"></nav></rp>
<rp id="kut09"></rp>
  • <tt id="kut09"></tt>
    <tt id="kut09"><tbody id="kut09"></tbody></tt>
    1. <u id="kut09"></u>
    2. <tt id="kut09"><noscript id="kut09"></noscript></tt>
    3. 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

      最新評論

      218彩票 www.giggiblu.com:江阴市| www.305182.com:桂平市| www.newvilleoutdoor.com:库尔勒市| www.alemdagemlakkonut.com:五原县| www.gx-dg.com:徐州市| www.wordsihate.org:浏阳市| www.cf667.com:丰原市| www.weijinying.com:荣成市| www.unitylinx.com:黔南| www.procarpetcleaningservices.com:朝阳区| www.ku6s.com:荣成市| www.fanliboke.com:沛县| www.discover-trinity.org:冕宁县| www.commonelementllc.com:台山市| www.waerdi.com:兴宁市| www.ytjskf.com:西峡县| www.htjfbjlaw.com:西吉县| www.ofnail.com:当涂县| www.eccacaceres.org:黎川县| www.hcsp139.com:邵阳县| www.arabianpunchfront.com:蓝田县| www.jdtzwd.com:呼图壁县| www.isabel-duque.com:安康市| www.zgwhzy.com:天柱县| www.hollyflicks.com:平乐县| www.m2878.com:基隆市| www.ptbtw.cn:清丰县| www.cec-ci.org:定西市| www.pieelectronics.com:百色市| www.takethiscash.com:台东市| www.dghuayao.com:大余县| www.mjdxxss.com:云阳县| www.gx-dg.com:重庆市| www.vampiresathruz.com:玛曲县| www.ggnotes.com:威信县| www.jt1h.com:嘉禾县| www.www8711msc.com:平原县| www.rctrw.cn:富裕县| www.in2demo.com:建德市| www.pdqez.com:乡宁县| www.orodfish.com:志丹县| www.apexautoleasing.com:永善县| www.wisengineering.org:屏山县| www.orleanscountyinfo.com:黄石市| www.qatarsworldcup.com:泰宁县| www.cp5527.com:鄂温| www.yr597.com:章丘市| www.bwenquan.com:麻阳| www.nrcb9.com:南安市| www.n438.com:惠东县| www.mfnxb.com:腾冲县| www.dl235.com:阿合奇县| www.lclxh.com:富锦市| www.hg28678.com:吴川市| www.847602.com:喜德县| www.chriscota.com:黄骅市| www.copperkidsolo.com:金湖县| www.mercadotecniaglobal.com:郸城县| www.cn-reiz.com:泗阳县| www.joomlaku.com:常州市| www.wearetsk.com:金华市| www.jlrkx.com:张北县| www.tianlijiqi.com:邳州市| www.hzmdprint.com:无极县| www.sn933.com:田东县| www.starolympus.com:永新县| www.catdossettboudoir.com:巴彦淖尔市| www.redrosemovie.com:乌鲁木齐县| www.tjdongtai.com:卢氏县| www.z5838.com:宜州市| www.aircompressorhose.org:井冈山市| www.damoa33.com:石棉县| www.zgspbw.com:德钦县| www.checkisautobody.com:凉城县| www.childhoroscopes.com:厦门市| www.hust-hy.com:界首市| www.yanhuasoft.com:茶陵县| www.ay-maplastik.com:莱芜市| www.yongqinlaw.com:嘉黎县| www.messagefacts.org:花莲县| www.sxhimac.com:东莞市| www.micheray.com:商丘市| www.burkholderpaving.com:沂源县| www.g9568.com:收藏|