91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PostgreSQL數據庫中去掉表中不可見的字符

發布時間:2020-12-30 14:48:42 來源:億速云 閱讀:394 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在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)的不可見字符,見如下測試。

怎么在PostgreSQL數據庫中去掉表中不可見的字符

但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數據庫中去掉表中不可見的字符,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德令哈市| 万盛区| 维西| 江油市| 黄大仙区| 鄯善县| 汉阴县| 石河子市| 丹寨县| 蕉岭县| 连城县| 富阳市| 苗栗县| 奉新县| 青河县| 抚远县| 革吉县| 沂水县| 云阳县| 定州市| 金华市| 长岛县| 东兴市| 黄平县| 神木县| 剑川县| 台东市| 泾川县| 梁河县| 德保县| 遂川县| 莱芜市| 高淳县| 天峻县| 南部县| 上林县| 增城市| 鄂伦春自治旗| 阿尔山市| 盐山县| 平南县|