Postgresql编码唯一键,IDEA控制台缓存,图片Base64转码

开心一笑

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

像我们这种一年四季随时可以出去玩的人,是根本没法体会那种激动的心情】

唯美图片

提出问题

Intellij IDEA 控制台缓存区大小如何修改???
PostgreSql的唯一性索引引发的问题???
Base64图片编码转换问题???
postgresql数据库编码问题???

解决问题

前言

这2天工作中,碰到了4个问题,耗了好多时间,整理分享下。

Intellij IDEA 控制台缓存区大小修改

业务场景

一份 user.xls 文件,里面有1000条数据。通过自己写的代码,将这1万条数据生成 sql 语句,打印到控制台。 由于 Intellij IDEA 控制台默认的缓存区只有 1024 KB,超过大小限制的就会被清除,而且还会显示【too much output to process】

解决方案

可通过如下配置界面进行修改Override console cycle buffer size(Settings→Editor→General→Console),单位为KB

这里写图片描述

完美解决......

PostgreSql的唯一性索引引发的问题

业务场景

数据库有一张表 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");

在数据库客户端执行如下脚本:

//插入一条数据
INSERT INTO "public"."ay_test" ("id", "name", "code") VALUES ('1', '1', '1');
//插入一条数据,这里code和上一条数据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" ;
//创建索引(注意不是唯一索引)
CREATE INDEX "idx_code" ON "public"."ay_test" USING btree ("code");
//插入数据验证
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-tree索引才能使用唯一性索引,唯一性索引可以使单字段和多字段绑定在一个索引上。

当一个索引被定义为唯一性索引时,那么无论是单字段还是多字段的索引,其涉及到的字段在表中的值是不能重复的,类似于主键和联合主键的意思。需要注意的是 null 值是不相等的,即第一行某字段为null第二行该字段也为null,那么这两个字段值不相等

Base64图片编码转换问题

业务场景

由于公司手机APP端需要下载图片,要求后端返回的图片是经过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);
    }
    // 对字节数组Base64编码(这里是重点)
    return Base64.encodeBase64String(b);
}

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

BASE64Encoder encoder = new BASE64Encoder();  
encoder.encode(data);//返回Base64编码过的字节数组字符串  

因为根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行
部分Base64编码的Java库还按照这个标准实行。

换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的编码字符串是不带换行符的。

postgresql数据库编码问题

业务场景

执行数据库查询的时候,控制台出现如下错误:

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

解决方案

原因是客户端字符集和插入内容的字符集不匹配。PostgreSQL默认不做字符集转换,如果数据库是UTF8的字符集,一般终端的中文字符集会设置为GBK(可以看LANG环境变量确认),所以这个编码不经转换的存入数据库中,而数据库是UTF8的,PostgreSQL发现不是UTF8编码,就报上面的错。
要想打开自动字符集转换功能,必须告诉 pg 客户端使用的字符集。这时可以设置pg客户端编码为GBK,pg就会自动做字符集转换。

读书感悟

来自《愤怒的葡萄》

  • “住惯了的地方是很难离开的,”凯绥说。“想惯了的道理也很难丢掉。“
  • “不存过高的希望,就不会让失望给搞垮。”

经典故事

【苍蝇发现自己模样很像蜜蜂,十分高兴,打算冒充蜜蜂去花丛里欺骗花的感情、盗取花蜜。可是它在花丛里飞来飞去不知飞了几个来回,却不见有一朵花向它绽放笑脸,他十分不解,转头问蜜蜂到底原因何在?蜜蜂笑着回答说:”你只是外形像我,事实上并不是我!因此,即使是一辈子蹲在花丛里,花也不会把你当成我!“
启示:外表可以相似,但内涵却是无法取代的。】

生活常识

【披萨正确吃法】

  • 吃比萨饼时应将已切好的饼(厨师已切好)取一块放入自己的餐盘中用刀、叉食用
  • 食用前可按自己口味加上一些胡椒。
  • 切好的饼呈三角状,左手拿叉、右手拿刀的人将饼的尖端转向左侧,从此处下刀。
  • 要切一块吃一块,先切碎再吃不雅观,也不易保持温度。

【拿铁的正确喝法】

  • 一般是先用咖啡勺,搅匀了之后,在饮用。喝时咖啡勺不要留在杯中。
  • 饮用拿铁之前可以先喝一杯冰水,充实浮现咖啡的味道。
  • 拿铁咖啡的饮用量要天天节制在1杯以内。

大神文章

【1】Base64编码出现换行符
【2】postgresql----唯一索引,表达式索引,部分索引
【3】invalid byte sequence for encoding "UTF8": 0xe99d2c

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容

  • 前段时间公司内部博客上凯哥分享了一篇关于mysql字符集编码的文章,之前我对mysql字符集一块基本没有深究过,看...
    __七把刀__阅读 6,293评论 14 18
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,112评论 18 139
  • 1、引言 数据库设计过程中表、字段等的命名规范也算是设计规范的一部分,不过设计规范更多的是为了确保数据库设计的合理...
    SnowflakeCloud阅读 40,663评论 0 48
  • 1.MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。My...
    黄花菜已凉阅读 4,525评论 3 60
  • 不到万不得已就将就着看本文吧,别看原文了.错别字多就算了,到后面还有还多语句的示例代码都张冠李戴了.当然,本文可能...
    Airmole阅读 1,584评论 0 4