You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用go-mysql-driver插入字符串报Error 1366错误求助

问题描述

使用go-mysql-driver向MySQL表插入字符串时遇到Error 1366错误,错误信息如下:

Error 1366: Incorrect string value: '\xA7test for column mycolumn at row 1

数据库连接代码:

db, err := sql.Open("mysql", "username:pass@tcp(127.0.0.1:3306)/mydb?charset=utf8mb4")

查询表字符集结果显示表为utf8mb4:

---------------------
| mytable | utf8mb4 |
---------------------

尝试插入的字符串为§test,已设置utf8mb4字符集但问题仍未解决。

解决方案

1. 检查目标列的字符集

表的字符集为utf8mb4不代表列的字符集一致。执行以下SQL确认mycolumn的字符集:

SELECT column_name, character_set_name 
FROM information_schema.columns 
WHERE table_name = 'mytable' AND column_name = 'mycolumn';

若列字符集不是utf8mb4,执行修改语句:

ALTER TABLE mytable 
MODIFY COLUMN mycolumn VARCHAR(255) 
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. 验证连接字符集是否生效

连接参数charset=utf8mb4可能未正确生效,连接后执行以下SQL确认当前连接字符集:

SHOW VARIABLES LIKE 'character_set_connection';

若结果不是utf8mb4,可在连接字符串中添加collation=utf8mb4_unicode_ci,或连接后手动设置:

_, err := db.Exec("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci")
if err != nil {
    // 处理错误逻辑
}

3. 确保插入字符串为UTF-8编码

错误信息中\xA7是单字节ISO-8859-1编码的§,而UTF-8编码应为\xC2\xA7。若字符串来自非UTF-8来源(如文件、旧系统),需转换为UTF-8:

// 示例:将ISO-8859-1编码字符串转为UTF-8
import "github.com/djimenez/iconv-go"

isoStr := "§test"
utf8Str, err := iconv.ConvertString(isoStr, "ISO-8859-1", "UTF-8")
if err != nil {
    // 处理转换错误
}
// 使用utf8Str执行插入操作

4. 使用参数化查询

避免直接拼接SQL字符串,参数化查询可让驱动自动处理编码问题:

_, err := db.Exec("INSERT INTO mytable (mycolumn) VALUES (?)", "§test")
if err != nil {
    // 处理插入错误
}

内容的提问来源于stack exchange,提问作者VpnUser4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:01:08