最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

問題描述

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

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

解決辦法

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

測試流程

環(huán)境準(zhǔn)備

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

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+數(shù)字鍵打印出來。

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

-- 函數(shù)說明:將表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;

執(zhí)行函數(shù)

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

補充–如何刪除chr(0)

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

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

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

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

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

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

解決該類問題,根據(jù)所屬應(yīng)用的不同,可通過三種手段解決:

在數(shù)據(jù)庫層解決:

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

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

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

在java程序中解決:

在java程序中,大家可通過獲取String對象的所有字節(jié)內(nèi)容,對字節(jié)內(nèi)容進(jìn)行掃描,來去掉其中不需要的字節(jié)。

在JNI層解決:

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

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

相關(guān)文章

  • Docker安裝PostgreSQL數(shù)據(jù)庫的詳細(xì)步驟

    Docker安裝PostgreSQL數(shù)據(jù)庫的詳細(xì)步驟

    這篇文章主要介紹了Docker安裝PostgreSQL數(shù)據(jù)庫的詳細(xì)步驟,包括啟動PostgreSQL容器、獲取容器的IP地址、啟動一個新的CentOS容器、在CentOS容器中安裝PostgreSQL客戶端、通過psql客戶端連接到PostgreSQL容器和在PostgreSQL中執(zhí)行SQL操作等內(nèi)容,需要的朋友可以參考下
    2024-10-10
  • 淺析postgresql 數(shù)據(jù)庫 TimescaleDB 修改分區(qū)時間范圍

    淺析postgresql 數(shù)據(jù)庫 TimescaleDB 修改分區(qū)時間范圍

    這篇文章主要介紹了淺析postgresql 數(shù)據(jù)庫 TimescaleDB 修改分區(qū)時間范圍,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • navicat無法連接postgreSQL-11的解決方案

    navicat無法連接postgreSQL-11的解決方案

    這篇文章主要介紹了navicat無法連接postgreSQL-11的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • pgsql 如何手動觸發(fā)歸檔

    pgsql 如何手動觸發(fā)歸檔

    這篇文章主要介紹了pgsql手動觸發(fā)歸檔的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL如何查詢表結(jié)構(gòu)和索引信息

    PostgreSQL如何查詢表結(jié)構(gòu)和索引信息

    文章介紹了在PostgreSQL中查詢表結(jié)構(gòu)和索引信息的幾種方法,包括使用`\d`元命令、系統(tǒng)數(shù)據(jù)字典查詢以及使用可視化工具DBeaver
    2024-12-12
  • PostgreSQL時間相差天數(shù)代碼實例

    PostgreSQL時間相差天數(shù)代碼實例

    PostgreSQL是一款簡介而又性能強大的數(shù)據(jù)庫應(yīng)用程序,其在日期時間數(shù)據(jù)方面所支持的功能也都非常給力,這篇文章主要給大家介紹了關(guān)于PostgreSQL時間相差天數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • pgsql 實現(xiàn)分頁查詢方式

    pgsql 實現(xiàn)分頁查詢方式

    這篇文章主要介紹了pgsql 實現(xiàn)分頁查詢方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 關(guān)于PostgreSql數(shù)據(jù)庫與mysql數(shù)據(jù)庫的不同點以及注意事項

    關(guān)于PostgreSql數(shù)據(jù)庫與mysql數(shù)據(jù)庫的不同點以及注意事項

    PostgreSQL和MySQL是兩種流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),它們都可以用來存儲和管理數(shù)據(jù),但是它們在某些方面有所不同,下面這篇文章主要給大家介紹了關(guān)于PostgreSql數(shù)據(jù)庫與mysql數(shù)據(jù)庫的不同點以及注意事項的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • postgresql實現(xiàn)對已有數(shù)據(jù)表分區(qū)處理的操作詳解

    postgresql實現(xiàn)對已有數(shù)據(jù)表分區(qū)處理的操作詳解

    這篇文章主要為大家詳細(xì)介紹了postgresql實現(xiàn)對已有數(shù)據(jù)表分區(qū)處理的操作的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • postgresql 中round函數(shù)的用法說明

    postgresql 中round函數(shù)的用法說明

    這篇文章主要介紹了postgresql 中round函數(shù)的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

嘉峪关市| 蓝田县| 上蔡县| 田林县| 杭州市| 安达市| 布尔津县| 仁寿县| 鲁山县| 大田县| 伽师县| 汝南县| 乌拉特中旗| 旅游| 金秀| 德安县| 北碚区| 织金县| 边坝县| 沁水县| 遂宁市| 遂平县| 利辛县| 嵊泗县| 密山市| 南江县| 上蔡县| 西青区| 改则县| 都昌县| 宜宾市| 循化| 平和县| 绥滨县| 富平县| 信阳市| 金门县| 晋宁县| 永新县| 赣榆县| 康平县|