开心一笑
【真的很羡慕那些五一放假可以出去玩的朋友
像我们这种一年四季随时可以出去玩的人,是根本没法体会那种激动的心情】
提出问题
Intellij IDEA 控制台缓存区大小如何修改???
Postgresql的唯一性索引引发的问题???
Base64图片编码转换问题???
postgresql数据库编码问题???
解决问题
前言@H_403_25@
这2天工作中,碰到了4个问题,耗了好多时间,整理分享下。
Intellij IDEA 控制台缓存区大小修改@H_403_25@
业务场景
一份 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的唯一性索引引发的问题@H_403_25@
业务场景
数据库有一张表 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","code") VALUES ('2','1');
报错:
[sql]INSERT INTO "public"."ay_test" ("id",'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","code") VALUES ('3','1'); INSERT INTO "public"."ay_test" ("id","code") VALUES ('4','1');
唯一索引知识补充
当前只有B-tree索引才能使用唯一性索引,唯一性索引可以使单字段和多字段绑定在一个索引上。
当一个索引被定义为唯一性索引时,那么无论是单字段还是多字段的索引,其涉及到的字段在表中的值是不能重复的,类似于主键和联合主键的意思。需要注意的是 null 值是不相等的,即第一行某字段为null第二行该字段也为null,那么这两个字段值不相等。
Base64图片编码转换问题@H_403_25@
业务场景
由于公司手机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
其他
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!