问题一:数据库中文显示问号


如图所示,应用后盾应用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语句无关,待下周学习一下相干语句。