乐趣区

关于后端:记录本周遇到的问题

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


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

退出移动版