Incorrect string value ‘xx’ for column ‘xx’at row 1 Query问题

这个让我头疼了很长时间,网上说是字符集问题。

其实最主要的问题为传入的参数与数据库类型对应不上。

我遇到的是我的实体中定义了属性为对象,而mybatis中传入的维对象类型。导致错误的发生。#{userid.id},

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.thinkgem.jeesite.modules.kaoqin.dailysale.dao.TscDailysaleDao">
    
	<sql id="tscDailysaleColumns">
		a.id AS "id",
		a.userid AS "userid",
		a.recorddate AS "recorddate",
		a.product AS "product",
		a.sale AS "sale",
		u.name AS "userName"
	</sql>
	
	<sql id="tscDailysaleJoins">
		LEFT JOIN SYS_USER u ON u.id = a.userid
	</sql>
    
	<select id="get" resultType="TscDailysale">
		SELECT 
			<include refid="tscDailysaleColumns"/>
		FROM tsc_dailysale a
		<include refid="tscDailysaleJoins"/>
		WHERE a.id = #{id}
	</select>
	
	<select id="findList" resultType="TscDailysale">
		SELECT 
			<include refid="tscDailysaleColumns"/>
		FROM tsc_dailysale a
		<include refid="tscDailysaleJoins"/>
		<where>
			
			<if test="userid != null and userid != ''">
				AND a.userId = #{userid}
			</if>
			<if test="recorddate != null and recorddate != ''">
				AND a.recorddate = #{recorddate}
			</if>
			<if test="product != null and product != ''">
				AND a.product = #{product}
			</if>
		</where>
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
			</otherwise>
		</choose>
	</select>
	
	<select id="findAllList" resultType="TscDailysale">
		SELECT 
			<include refid="tscDailysaleColumns"/>
		FROM tsc_dailysale a
		<include refid="tscDailysaleJoins"/>
		<where>
			
		</where>		
		<choose>
			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
				ORDER BY ${page.orderBy}
			</when>
			<otherwise>
			</otherwise>
		</choose>
	</select>
	
	<insert id="insert">
		INSERT INTO tsc_dailysale(
			id,
			userId,
			recordDate,
			product,
			sale
		) VALUES (
			#{id},
			#{userid.id},
			#{recorddate},
			#{product},
			#{sale}
		)
	</insert>
	
	<update id="update">
		UPDATE tsc_dailysale SET 	
			userId = #{userid.id},
			recorddate = #{recorddate},
			product = #{product},
			sale = #{sale}
		WHERE id = #{id}
	</update>
	
	<update id="delete">
		DELETE FROM tsc_dailysale
		WHERE id = #{id}
	</update>
	
</mapper>

下面是抄的为别人归纳的字符集解决的方案

1.在mysql的安装目录下找到my.ini,作如下修改:

[mysqld]

character-set-server=utf8mb4

[mysql]

default-character-set=utf8mb4

修改后重启Mysql

2. 将已经建好的表也转换成utf8mb4

命令:

更改数据库编码:ALTER DATABASE caitu99 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

alter table TABLE_NAME convert to character set utf8mb4 collate utf8mb4_bin; (将TABLE_NAME替换成你的表名)

然后就OK了。网上流传的一个版本增加了一个步骤,就是把mysql环境变量将character_set_client,character_set_connection,character_set_database,character_set_results,character_set_server 都修改成utf8mb4,不过我没有做这一步,也正常,所以可能是这一步是多余的,如果需要改,则按照下面介绍做修改。

3修改mysql配置文件my.cnf(windows为my.ini) 

my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容: 
[client] 
default-character-set = utf8mb4 
[mysql] 
default-character-set = utf8mb4 
[mysqld] 
character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
init_connect='SET NAMES utf8mb4'

猜你喜欢

转载自blog.csdn.net/qq_37538698/article/details/83088325