共计 2079 个字符,预计需要花费 6 分钟才能阅读完成。
问题一:数据库中文显示问号
如图所示,应用后盾应用 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 语句无关,待下周学习一下相干语句。