复现
前几天进行业务迁移,在没有任何代码修改的基础上竟然出现了异常,切换到本地环境后,异常也复现了出来:
1 | java.sql.SQLException: Unknown system variable 'query_cache_size' |
前段时间刚换了新的工作,然后之前也在一直准备面试,入职之后又需要适应新的工作内容、新的同事、新的项目,所以博客也一直没写,也没有学习新的东西,总的来说还是有点懈怠。😭 不过最近已经在慢慢变好了。
那么开始正题,这个问题是怎么来的呢?新的公司肯定要负责新的项目呀,那么遇到的第一个问题就向你走来了。
我在负责一个新的项目时,要上线到测试的服务器,然后首先就是 SQL
的打包上线,这问题不就来了嘛。
1 | ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes |
字面意思如下:索引字段长度太长,最大长度是 767
字节。
很有意思的是,本地数据库都是正常的,为什么测试数据库不行呢?
前段时间在看算法这块的东西,看的我是头昏脑胀。所以这几天又捡起了 《深入理解Java虚拟机》 这本书,这次主要看的是书中的 第三部分,我一直崇尚知识是在不断的总结和不断地学习相互交叉,这样才能学以致用,用而有据。
字节码指的是 Java
中的 .java
文件经过编译( javac
)后生成的固定格式文件 .class
文件以供 JVM
使用。
之所以被称为字节码文件是因为字节码文件是由十六进制值组成,JVM
以两个十六进制值为一组,即一个字节进行读取。同时 JVM
也针对不同操作系统和平台进行优化,这也就是 Java
号称 一次编译,到处运行 的根本原因。
由此又可以引出一个问题,由于 JVM
规范的存在,那么只要我们最终可以生成符合 JVM
规范的字节码文件那就可以在 JVM
上运行了,这也就产生了其他运行在 JVM
上的语言(如 Scale、Kotlin、Groovy ),可以通过其他语言可以扩展 Java
所没有的特性和语法糖。