SpringBoot之JPA问题汇总
1.jpa插入mysql时中文乱码
(1)在mysql中新建查询 show variables like ‘char%’,看到character_set_server的值为latin1,
(2)修改mysql.ini中
[mysqld]下的
character-set-server=utf8(没有就添加上)
(mysql5.7的ini在C:\ProgramData\MySQL\MySQL Server 5.7目录下,linxu在/etc/mysql/mysql.conf.d/mysql.cnf)
重启mysql
2.jpa查询时不区分大小写
在Mysql数据库中进行查询时,希望英文严格区分大小写。默认情况下是不区分大小写的。
Mysql默认的字符检索策略:utf8_general_ci,表示不区分大小写;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 。(注意:在Mysql5.6.10版本中,不支持utf8_genral_cs!!!!)
(1) 方式一
创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin;如果已经创建表,则直接修改字段的Collation属性(或叫排序规则)为utf8_general_cs或者utf8_bin。
1 | CREATE TABLE testt( |
如果表已经创建,则修改表结构中Collation字段
这时候,再执行上面的两条sql语句,则会严格区分大小写。
(2) 方式二
第二种方式比较简单,是直接修改sql语句,在要查询的字段前面加上binary关键字即可。
1 | SELECT * FROM emp WHERE BINARY emp.job='Engineer' |
1.Mysql查询英文如何严格区分大小写
3.日期类型的字符串排序,空值在最上面
SELECT * FROM projects ORDER BY LENGTH(trim(pubdate))<1 DESC,pubdate DESC
4.出现错误:The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone
解决方式是在连接数据库的字符串的后面添加:?serverTimezone=GMT
spring.datasource.url=jdbc:mysql://localhost:3306/xjserver?serverTimezone=GMT
5.Unable to locate Attribute with the the given name [wxOpenid] on this ManagedType
这个问题也可以归结为数据库字段不规范的问题,如果数据库中的字段名是大写字母开头的化,就有可能出现在使用jpa自带的find语句进行查询的时候出现下面的错误。
解决方法有两种:
(1) 实体属性编写时使用规范的驼峰命名,然后使用@Column指明具体的数据库字段名
1 |
|
(2) 第二种就是使用@Query代替自动生成的find语句
1 | public interface WxUserRep extends JpaRepository<WxUser,Long> { |
1.Spring Jpa报错之Unable to locate Attribute with the the given name [PId] on this ManagedType (这篇文章没有用)
2.SpringBoot Jpa使用时碰到的问题总结二 (这篇文章中建议:一开始设计时,设计字段符合驼峰规则。如果实在无法避免首字母必须大写,那么可以用@query进行查询)
3.Spring Data JPA Unable to locate Attribute with the given name
4.@Query注解的用法(Spring Data JPA)