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

前端之家收集整理的这篇文章主要介绍了Postgresql编码唯一键,IDEA控制台缓存,图片Base64转码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_1@开心一笑 @H_404_5@【真的很羡慕那些五一放假可以出去玩的朋友

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

提出问题

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

解决问题

前言

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

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

业务场景

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

解决方

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

@H_404_5@完美解决……

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

业务场景

@H_404_5@数据库有一张表 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");
@H_404_5@在数据库客户端执行如下脚本:

//插入一条数据
INSERT INTO "public"."ay_test" ("id","name","code") VALUES ('1','1','1');
//插入一条数据,这里code和上一条数据code一样
INSERT INTO "public"."ay_test" ("id","code") VALUES ('2','1');
@H_404_5@报错:

[sql]INSERT INTO "public"."ay_test" ("id",'1');

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

解决方

@H_404_5@解决方法也是比较简单的:

//删除索引   
DROP INDEX "idx_code" ;
//创建索引(注意不是唯一索引)
CREATE INDEX "idx_code" ON "public"."ay_test" USING btree ("code");
//插入数据验证
INSERT INTO "public"."ay_test" ("id","code") VALUES ('3','1');
INSERT INTO "public"."ay_test" ("id","code") VALUES ('4','1');

唯一索引知识补充

@H_404_5@当前只有B-tree索引才能使用唯一性索引,唯一性索引可以使单字段和多字段绑定在一个索引上。

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

Base64图片编码转换问题

业务场景

@H_404_5@由于公司手机APP端需要下载图片,要求后端返回的图片是经过Base64位编码过的字符串,中间也废了好多时间,特意整理下。

解决方

@H_404_5@这里只贴出部分代码

@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);
}
@H_404_5@这里使用 Base64.encodeBase64String(b) 而不使用

BASE64Encoder encoder = new BASE64Encoder();  
encoder.encode(data);//返回Base64编码过的字节数组字符串
@H_404_5@因为根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行
部分Base64编码的Java库还按照这个标准实行。

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

postgresql数据库编码问题

业务场景

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

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

解决方

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

读书感悟

@H_404_5@来自《愤怒的葡萄》

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

经典故事

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

生活常识

@H_404_5@【披萨正确吃法】

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

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

大神文章

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

其他

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

猜你在找的IDEA相关文章