婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PostgreSQL去掉表中所有不可見字符的操作

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

熱門標(biāo)簽:美容工作室地圖標(biāo)注 外呼調(diào)研系統(tǒng) 重慶自動外呼系統(tǒng)定制 漯河外呼電話系統(tǒng) 打電話智能電銷機(jī)器人授權(quán) 辦公外呼電話系統(tǒng) 海豐有多少商家沒有地圖標(biāo)注 合肥公司外呼系統(tǒng)運(yùn)營商 地圖標(biāo)注和圖片名稱的區(qū)別

問題描述

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

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

解決辦法

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

測試流程

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

建表,并插入帶不可見字符的記錄。注:下列數(shù)據(jù)中的不可見字符在粘貼過來的時(shí)候自動去掉了,請按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代替。實(shí)際上在其它地方可以用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ù),所有的不可見字符都被替換為空格。

補(bǔ)充–如何刪除chr(0)

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

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

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

在以前的項(xiàng)目中,曾經(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)這種情況時(shí),由于java和c++中對字符串處理的不同,將會導(dǎo)致所取得的字符串長度不同。

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

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

解決該類問題,根據(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ā)生。

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

您可能感興趣的文章:
  • postgresql 查詢字符串中是否包含某字符的操作
  • PostgreSQL 使用raise函數(shù)打印字符串
  • PostgreSQL 字符串拆分與合并案例
  • Postgresql 數(shù)據(jù)庫 varchar()字符占用多少字節(jié)介紹
  • 解決postgresql 數(shù)字轉(zhuǎn)換成字符串前面會多出一個(gè)空格的問題
  • postgreSQL 數(shù)字與字符串類型轉(zhuǎn)換操作
  • Postgresql 數(shù)據(jù)庫轉(zhuǎn)義字符操作

標(biāo)簽:烏海 晉城 錦州 來賓 蚌埠 珠海 衡陽 株洲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL去掉表中所有不可見字符的操作》,本文關(guān)鍵詞  PostgreSQL,去掉,表中,所,有不,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL去掉表中所有不可見字符的操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于PostgreSQL去掉表中所有不可見字符的操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 陕西省| 凭祥市| 三穗县| 即墨市| 贡山| 南投市| 高邑县| 阿巴嘎旗| 山西省| 衡水市| 鄯善县| 广东省| 临夏县| 樟树市| 甘肃省| 维西| 临海市| 观塘区| 和政县| 二手房| 栾城县| 灵武市| 乐亭县| 贵州省| 囊谦县| 乳山市| 玉山县| 和静县| 团风县| 敖汉旗| 湘潭县| 繁峙县| 铜陵市| 吉林市| 公安县| 兴山县| 进贤县| 遂昌县| 新竹市| 玛多县| 子洲县|