@H_403_1@开心一笑
@H_404_5@【真的很羡慕那些五一放假可以出去玩的朋友
@H_404_5@像我们这种一年四季随时可以出去玩的人,是根本没法体会那种激动的心情】
Postgresql的唯一性索引引发的问题???
Base64图片编码转换问题???
postgresql数据库编码问题???
部分Base64编码的Java库还按照这个标准实行。 @H_404_5@换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的编码字符串是不带换行符的。
要想打开自动字符集转换功能,必须告诉 pg 客户端使用的字符集。这时可以设置pg客户端编码为GBK,pg就会自动做字符集转换。
启示:外表可以相似,但内涵却是无法取代的。】
【2】postgresql—-唯一索引,表达式索引,部分索引
【3】invalid byte sequence for encoding “UTF8”: 0xe99d2c
提出问题
@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@数据库有一张表 NewTableCREATE 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@【披萨正确吃法】- 吃比萨饼时应将已切好的饼(厨师已切好)取一块放入自己的餐盘中用刀、叉食用。
- 食用前可按自己口味加上一些胡椒。
- 切好的饼呈三角状,左手拿叉、右手拿刀的人将饼的尖端转向左侧,从此处下刀。
- 要切一块吃一块,先切碎再吃不雅观,也不易保持温度。
- 一般是先用咖啡勺,搅匀了之后,在饮用。喝时咖啡勺不要留在杯中。
- 饮用拿铁之前可以先喝一杯冰水,充实浮现咖啡的味道。
- 拿铁咖啡的饮用量要天天节制在1杯以内。
大神文章
@H_404_5@【1】Base64编码出现换行符【2】postgresql—-唯一索引,表达式索引,部分索引
【3】invalid byte sequence for encoding “UTF8”: 0xe99d2c