0%

1. 模拟数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 建表
CREATE TABLE `test_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`,`age`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;

# 添加数据
INSERT INTO `test_user` VALUES (1, '张三1', NULL);
INSERT INTO `test_user` VALUES (3, '张三1', NULL);
INSERT INTO `test_user` VALUES (5, '张三1', NULL);
INSERT INTO `test_user` VALUES (2, '张三2', NULL);
INSERT INTO `test_user` VALUES (4, '张三4', NULL);

2、null破坏了唯一性

1
2
3
4
5
6
7
SELECT
*
FROM
test_user
WHERE
NAME = "张三1"
AND age IS NULL;

3、原因

在mysql 的innodb引擎中,是允许在唯一索引的字段中出现多个null值的。

根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知。根据这个定义,多个NULL值的存在应该不违反唯一约束,所以是合理的,在oracel也是如此。

4、怎么避免破坏唯一性

不允许列出现 null 值,即not null
给列增加 default 值,注意default值不能是 null。

问题

Logback日志中出现中文乱码

解决办法

在配置文件的<encoder>中添加<charset>UTF-8</charset>

1
2
3
4
5
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} - %msg%n</pattern>
    <charset>UTF-8</charset>
</encoder>

在分析gc日实例志之前,我们先通过一条《深入理解java虚拟机》一书中的一个例子gc日志来回顾一下gc日志的基本知识,下面是一条gc日志:

1
33.125:[GC[DefNew: 3324k->152k(3712k), 0.0025925 secs] 3324k>152k(11904k),0.0031680 secs]

从左至右,各个信息的意思为:

  • 33.125: 自虚拟机启动以来经过的秒数,单位为秒;

  • GC: 垃圾收集的停顿类型为不需要STW(Stop The World )。如果是Full GC说明发生了STW。如果是Full GC (System)说明是调用System.gc()方法所触发的收集。

  • DefNew:表示GC发生的区域在新生代。这个名称和所使用的收集器密切相关。可以有Tenured、Perm、ParNew、PSYoungGen等等。其中hotspot虚拟机使用的是PSYoungGen代表新生代

  • 3324k->152k(3712k):GC前该区域(DefNew)已使用容量->GC后该区域已使用容量(该内存区域总容量)

  • 0.0025925 secs:该内存区域(DefNew)GC所占用的时间。

  • 3324k->152k(11904k):GC前Java堆已使用容量->GC后Java堆已使用容量(Java堆总容量)

阅读全文 »

经常写博文的朋友对床图肯定不陌生。使用markdown撰写博客,将图片放在床图网站生成外链统一管理,这样一份博文就可以发布在不同的平台。不过免费的床图网站有时不稳定,付费价格又都不便宜。

可以使用Github+jsDelivr的方式搭建个人床图,既稳定又快速还免费。

阅读全文 »

1. Option –> Session Options

2. Terminal –> Emulation

在Scrollback输入你需要的最大显示行数,最大行数是128000