Postgresql編碼唯一鍵,IDEA控制臺緩存,圖片Base64轉(zhuǎn)碼

開心一笑

【真的很羨慕那些五一放假可以出去玩的朋友

像我們這種一年四季隨時可以出去玩的人,是根本沒法體會那種激動的心情】

唯美圖片

提出問題

Intellij IDEA 控制臺緩存區(qū)大小如何修改???
PostgreSql的唯一性索引引發(fā)的問題???
Base64圖片編碼轉(zhuǎn)換問題???
postgresql數(shù)據(jù)庫編碼問題???

解決問題

前言

這2天工作中,碰到了4個問題,耗了好多時間,整理分享下。

Intellij IDEA 控制臺緩存區(qū)大小修改

業(yè)務(wù)場景

一份 user.xls 文件,里面有1000條數(shù)據(jù)。通過自己寫的代碼,將這1萬條數(shù)據(jù)生成 sql 語句,打印到控制臺。 由于 Intellij IDEA 控制臺默認(rèn)的緩存區(qū)只有 1024 KB,超過大小限制的就會被清除,而且還會顯示【too much output to process】

解決方案

可通過如下配置界面進(jìn)行修改Override console cycle buffer size(Settings→Editor→General→Console),單位為KB

這里寫圖片描述

完美解決......

PostgreSql的唯一性索引引發(fā)的問題

業(yè)務(wù)場景

數(shù)據(jù)庫有一張表 NewTable

CREATE TABLE "public"."NewTable" (
"id" varchar(32) NOT NULL,
"name" varchar(100),
"code" varchar(100),
PRIMARY KEY ("id")
)
WITH (OIDS=FALSE)
;
//這里由于誤操作,建立了一個唯一索引
CREATE UNIQUE INDEX "idx_code" ON "public"."NewTable" USING btree ("code");

在數(shù)據(jù)庫客戶端執(zhí)行如下腳本:

//插入一條數(shù)據(jù)
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('1', '1', '1');
//插入一條數(shù)據(jù),這里code和上一條數(shù)據(jù)code一樣
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('2', '1', '1');

報錯:

[SQL]INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('2', '1', '1');

[Err] ERROR:  duplicate key value violates unique constraint "idx_code"
DETAIL:  Key (code)=(1) already exists.

解決方案

解決方法也是比較簡單的:

//刪除索引   
DROP INDEX "idx_code" ;
//創(chuàng)建索引(注意不是唯一索引)
CREATE INDEX "idx_code" ON "public"."ay_test" USING btree ("code");
//插入數(shù)據(jù)驗證
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('3', '1', '1');
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('4', '1', '1');

唯一索引知識補(bǔ)充

當(dāng)前只有B-tree索引才能使用唯一性索引,唯一性索引可以使單字段和多字段綁定在一個索引上。

當(dāng)一個索引被定義為唯一性索引時,那么無論是單字段還是多字段的索引,其涉及到的字段在表中的值是不能重復(fù)的,類似于主鍵和聯(lián)合主鍵的意思。需要注意的是 null 值是不相等的,即第一行某字段為null第二行該字段也為null,那么這兩個字段值不相等。

Base64圖片編碼轉(zhuǎn)換問題

業(yè)務(wù)場景

由于公司手機(jī)APP端需要下載圖片,要求后端返回的圖片是經(jīng)過Base64位編碼過的字符串,中間也廢了好多時間,特意整理下。

解決方案

這里只貼出部分代碼:

@Override
public String download(String id) throws Exception {
    SysAttachment sysAttachment = (SysAttachment)sysAttachmentService.findById(id);
    String name = sysAttachment.getName() + this.POINT + sysAttachment.getType();
    String path = sysAttachment.getPath();
    FileInputStream in = null;
    byte[] b = null;
    try {
        File file = new File(path);
        if (file.exists()) {
            try {
                //文件inputStream
                in = new FileInputStream(path);
                b = new byte[in.available()];
                in.read(b);
            } finally {
                if (in != null) {
                    in.close();
                    in = null;
                }
            }
        } else {
            throw new ResourceNotFoundException("文件: \"" + name + "\"不存在!");
        }
    } catch (IOException var8) {
        throw new SystemException(ErrorCode.Common.downloadFailed);
    }
    // 對字節(jié)數(shù)組Base64編碼(這里是重點)
    return Base64.encodeBase64String(b);
}

這里使用 Base64.encodeBase64String(b) 而不使用

BASE64Encoder encoder = new BASE64Encoder();  
encoder.encode(data);//返回Base64編碼過的字節(jié)數(shù)組字符串  

因為根據(jù)RFC822規(guī)定,BASE64Encoder編碼每76個字符,還需要加上一個回車換行
部分Base64編碼的Java庫還按照這個標(biāo)準(zhǔn)實行。

換用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的編碼字符串是不帶換行符的。

postgresql數(shù)據(jù)庫編碼問題

業(yè)務(wù)場景

執(zhí)行數(shù)據(jù)庫查詢的時候,控制臺出現(xiàn)如下錯誤:

Cause: org.postgresql.util.PSQLException: ERROR: character with byte sequence 0xc2 0xa0 in encoding "UTF8" has no equivalent in encoding "GBK"

解決方案

原因是客戶端字符集和插入內(nèi)容的字符集不匹配。PostgreSQL默認(rèn)不做字符集轉(zhuǎn)換,如果數(shù)據(jù)庫是UTF8的字符集,一般終端的中文字符集會設(shè)置為GBK(可以看LANG環(huán)境變量確認(rèn)),所以這個編碼不經(jīng)轉(zhuǎn)換的存入數(shù)據(jù)庫中,而數(shù)據(jù)庫是UTF8的,PostgreSQL發(fā)現(xiàn)不是UTF8編碼,就報上面的錯。
要想打開自動字符集轉(zhuǎn)換功能,必須告訴 pg 客戶端使用的字符集。這時可以設(shè)置pg客戶端編碼為GBK,pg就會自動做字符集轉(zhuǎn)換。

讀書感悟

來自《憤怒的葡萄》

  • “住慣了的地方是很難離開的,”凱綏說?!跋霊T了的道理也很難丟掉?!?/li>
  • “不存過高的希望,就不會讓失望給搞垮?!?/li>

經(jīng)典故事

【蒼蠅發(fā)現(xiàn)自己模樣很像蜜蜂,十分高興,打算冒充蜜蜂去花叢里欺騙花的感情、盜取花蜜??墒撬诨▍怖镲w來飛去不知飛了幾個來回,卻不見有一朵花向它綻放笑臉,他十分不解,轉(zhuǎn)頭問蜜蜂到底原因何在?蜜蜂笑著回答說:”你只是外形像我,事實上并不是我!因此,即使是一輩子蹲在花叢里,花也不會把你當(dāng)成我!“
啟示:外表可以相似,但內(nèi)涵卻是無法取代的。】

生活常識

【披薩正確吃法】

  • 吃比薩餅時應(yīng)將已切好的餅(廚師已切好)取一塊放入自己的餐盤中用刀、叉食用。
  • 食用前可按自己口味加上一些胡椒。
  • 切好的餅呈三角狀,左手拿叉、右手拿刀的人將餅的尖端轉(zhuǎn)向左側(cè),從此處下刀。
  • 要切一塊吃一塊,先切碎再吃不雅觀,也不易保持溫度。

【拿鐵的正確喝法】

  • 一般是先用咖啡勺,攪勻了之后,在飲用。喝時咖啡勺不要留在杯中。
  • 飲用拿鐵之前可以先喝一杯冰水,充實浮現(xiàn)咖啡的味道。
  • 拿鐵咖啡的飲用量要天天節(jié)制在1杯以內(nèi)。

大神文章

【1】Base64編碼出現(xiàn)換行符
【2】postgresql----唯一索引,表達(dá)式索引,部分索引
【3】invalid byte sequence for encoding "UTF8": 0xe99d2c

其他

如果有帶給你一絲絲小快樂,就讓快樂繼續(xù)傳遞下去,歡迎點贊、頂、歡迎留下寶貴的意見、多謝支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前段時間公司內(nèi)部博客上凱哥分享了一篇關(guān)于mysql字符集編碼的文章,之前我對mysql字符集一塊基本沒有深究過,看...
    __七把刀__閱讀 6,706評論 14 18
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 1、引言 數(shù)據(jù)庫設(shè)計過程中表、字段等的命名規(guī)范也算是設(shè)計規(guī)范的一部分,不過設(shè)計規(guī)范更多的是為了確保數(shù)據(jù)庫設(shè)計的合理...
    SnowflakeCloud閱讀 41,251評論 0 48
  • 1.MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下產(chǎn)品。My...
    黃花菜已涼閱讀 4,664評論 3 60
  • 不到萬不得已就將就著看本文吧,別看原文了.錯別字多就算了,到后面還有還多語句的示例代碼都張冠李戴了.當(dāng)然,本文可能...
    Airmole閱讀 1,763評論 0 4

友情鏈接更多精彩內(nèi)容