Golang MySQL插入数据时出现错误:"Incorrect string value: '\xC3'"
Golang MySQL插入数据时出现错误:“Incorrect string value: ‘\xC3’” 也许这里有人能帮我解决这个问题。我在 Stackoverflow 上提到了所有细节——请查看这里: https://stackoverflow.com/questions/63767694/go-mysql-insert-incorrect-string-value-xc3
到目前为止,我已经尝试了几种选项和解决方案,但我仍然遇到同样的问题。 我不确定这是否是 Go 的 bug?我毫无头绪。
如果能找到修复方法就太好了。 谢谢。
更多关于Golang MySQL插入数据时出现错误:"Incorrect string value: '\xC3'"的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang MySQL插入数据时出现错误:"Incorrect string value: '\xC3'"的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这个错误通常是由于MySQL数据库的字符集配置不支持特定字符导致的。以下是解决方案:
1. 检查并修改数据库/表/列的字符集:
-- 查看当前字符集配置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 修改数据库字符集为utf8mb4
ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 修改表的字符集
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改特定列的字符集
ALTER TABLE your_table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 在Go连接字符串中指定字符集:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// 在DSN中添加charset=utf8mb4参数
dsn := "user:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
defer db.Close()
// 设置连接参数
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)
}
3. 确保MySQL服务器配置支持utf8mb4:
编辑MySQL配置文件(my.cnf或my.ini):
[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
4. 插入数据时显式处理字符编码:
func insertData(db *sql.DB, data string) error {
// 如果数据包含特殊字符,确保正确编码
stmt, err := db.Prepare("INSERT INTO your_table (text_column) VALUES (?)")
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec(data)
return err
}
5. 验证字符集问题的示例代码:
func testCharset(db *sql.DB) error {
// 测试插入包含特殊字符的数据
testStrings := []string{
"正常文本",
"特殊字符: café",
"emoji: 😀",
"欧洲字符: naïve",
}
for _, s := range testStrings {
_, err := db.Exec("INSERT INTO test_table (content) VALUES (?)", s)
if err != nil {
return fmt.Errorf("插入失败 '%s': %v", s, err)
}
}
return nil
}
执行上述修改后,重启MySQL服务并重新测试插入操作。错误’\xC3’通常表示尝试插入UTF-8字符到不支持该字符集的列中,使用utf8mb4字符集可以解决大多数Unicode字符的存储问题。

