问题一:数据库中文显示问号
文章图片
如图所示,使用后台使用jdbcTemplate.execute(sql)保存到数据库后显示中文。当时查看数据库和表格的编码都没问题,都是utf8mb4。当时就去谷歌搜索。上面说先查看数据库各个编码格式,如果为utf8或者utf8mb4那就说明没有问题。
文章图片
但是我的有一个属性是latin1:
文章图片
Latin1是ISO-8859-1的别名,。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
但是其中的文字符号包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,没有中文。
但是这里的问题不在于latin1,mysql用latin1也可以显示中文。原因在于中文不管用什么字符集来表示(GBK\GB2312\UTF8等),最终都是字节的整数倍,而latin1就是满8byte(整字节)的编码方式,所以任何其他的码流都可以被看做latin1。无论你传多少个字节进去,mysql都可以认为它是一个或者多个latin字符而已。但是基于可维护的角度,虽然latin1没什么问题,但是还是尽量换成utf8或者utfmb4系列。
查阅提到问题可能在于当character_set_server 与 character_set_database等不同,因为在读取和写入的时候如果采取不同的编码方式,编译器就可能会犯懵。所以如第一个图所示,character_set_server和其他几个最好都改成一样的,如uf8mb4。
但是最后参考了网上大部分修改都没有把这个latin1改成功。按照网上的修改了my.cnf文件但是没有反应,还是对应属性还是latin1。
最后问了老师之后才明白可以修改后台与数据库的连接方式,搜索相关内容后,在后台与数据库的连接上加上这行就行了,最后能正常使用。
?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=UTC&useSSL=false
参考文章:https://database.51cto.com/ar...
问题二:请求报错
{
"timestamp": "2022-01-14T09:18:42.269+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Cannot construct instance of
`com.mengyunzhi.springBootStudy.TeacherController$Teacher`
(although at least one Creator exists): can only instantiate
non-static inner class by using default, no-argument
constructor;
nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.mengyunzhi.springBootStudy.TeacherController$Teacher` (although at least one Creator exists): can only instantiate non-static inner class by using default, no-argument constructor\n at [Source: (PushbackInputStream);
line: 2, column: 3]",
"path": "/Teacher"
}
大概说的是Teacher无法实例化。can only instantiate non-static inner class by using default, no-argument constructor; 。发生了嵌套异常。
发现我Teacher类写在了controller内部。可能看教程的时候没注意到,应该新建一个文件来存放。
文章图片
编译器报过这行,但是因为是warning就没在意。但是我觉得Teacher不是静态的。
文章图片
问题的本质是:内部非静态类无法实例化
正常来说应该把Teacher类单独建一个文件出来外,但是为了解决报错还可以:
1.给内部类前面加上static。因为静态内部类其实就相当于顶级类,不依赖与外部类,而普通内部类实例话需要依赖于外部实例对象。
2.给内部类加上默认构造函数
问题三:
文章图片
当时id报错说can resolve path variable "id" in request mapping. 对比了教程发现@GetMapping的id没有用中括号括上。
目前认为的是如果不加括号则认为是路径,加了之后则可以识别为参数。
问题四: 教程中有三种写法
文章图片
文章图片
文章图片
【记录本周遇到的问题】有的地方用%d,有的用%s,但是都能正常使用,应该和mysql语句有关,待下周学习一下相关语句。
推荐阅读
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- Python|Python实战(使用线性回归预测房价)
- IC|数字IC后端真的不如前端设计和验证吗()
- Python|教你写个简单好用的Python脚本一键自动整理文件非常适合办公用~
- python|oeasy教您玩转python - 007 - # 字符本质
- vue.js|后端开发学习Vue(一)
- Go|Docker后端部署详解(Go+Nginx)
- 后台|NATAPP内网穿透通过nginx实现一个端口访问多个不同端口服务