赞
踩
温馨提示:
下面的出现的情况属于层层递进的,如果只解决其中一种情况会接着报下一个情况,如果只想了解解决方案请直接移步至结论。
2. 产生原因:
在SQL查询中尝试执行了一个不被支持的数据类型比较操作。
3. 解决方案:
在application.yaml文件中,在url后加&stringtype=unspecified
,例如:
- spring:
- datasource:
- driver-class-name: com.highgo.jdbc.Driver
- url: jdbc:highgo://localhost:5866/highgo?currentSchema=demo&stringtype=unspecified
- username: root
- password: root
1. 报错详细描述:
2. 产生原因:
常常发生在模糊匹配上。在执行参数化查询时,数据库无法识别或推断出传入参数的具体数据类型。
3. 解决方案:
需要在注入的值后加::数据类型。例如要模糊匹配varchar类型的name:
原sql语句为:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword},'%');
修改后sql语句为:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword}::text,'%');
或者可以修改为:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword}::varchar,'%');
1. 产生场景:
在本地运行时,sql可以正常运行。在部署后,测试sql会报出该错误。一般发生在模糊匹配。
2. 产生原因:
a. 在执行参数化查询时,数据库无法识别参数$1的确切数据类型。
b. 本地开发环境与生产环境的配置不同。
3. 解决方案
在模糊匹配后加 ESCAPE '/' ,如:
原sql语句:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword}::varchar,'%');
修改后sql语句:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword}::varchar,'%') ESCAPE '/';
第一步,修改appliction.yaml。在application.yaml文件中,在url后加&stringtype=unspecified
,例如:
- spring:
- datasource:
- driver-class-name: com.highgo.jdbc.Driver
- url: jdbc:highgo://localhost:5866/highgo?currentSchema=demo&stringtype=unspecified
- username: root
- password: root
第二步,修改sql语句。模糊匹配位置 ,将填充的值指定数据类型,并在CONCAT函数后加 ESCAPE '/'。如:
原sql语句:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword},'%');
修改后sql语句为:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword}::varchar,'%') ESCAPE '/';
或:
SELECT * FROM demo WHERE name LIKE CONCAT('%',#{keyword}::text,'%') ESCAPE '/';
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。