開心一笑
【真的很羨慕那些五一放假可以出去玩的朋友
像我們這種一年四季隨時可以出去玩的人,是根本沒法體會那種激動的心情】
提出問題
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ù)傳遞下去,歡迎點贊、頂、歡迎留下寶貴的意見、多謝支持!