【发布时间】:2015-11-26 05:31:09
【问题描述】:
所以我尝试使用 sql 驱动程序将此字符串输入 mysql 数据库。我收到此错误 -
Do?a Merced Elementary
panic: Error 1366: Incorrect string value: '\x96a Mer...' for column 'name' at row 1
我曾考虑排除此条目,但未能如愿。我试过了-
if !strings.ContainsAny(splitStr[2], "U+0303") {
if !strings.ContainsAny(splitStr[2], '\x96') {
但这并没有奏效。
最好让mysql处理这个,但我不确定如何。
有什么建议吗?
编辑
这就是我连接数据库的方式
db, err := sql.Open("mysql", "psanker:123@/education_data")
err = db.Ping()
db.SetMaxOpenConns(0)
check(err)
if err != nil {
fmt.Println("Failed to prepare connection to database")
log.Fatal("Error:", err.Error())
}
这就是我的问题所在
districtResult, err := db.Exec("INSERT INTO districts(name) VALUES(?)", strings.TrimSpace(splitStr[2]))
check(err)
SHOW CREATE TABLE 的输出
---------------------------------+
| Table | Create Table |
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| districts | CREATE TABLE `districts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
【问题讨论】:
-
表格字段中的排序规则是什么?
-
就是这个 latin1_swedish_ci
-
我认为长期最好的做法是将您的输入从 MacRoman 转换为 UTF-8,因为 UTF-8 是一种使用更广泛且更灵活的编码。您可以调用一个名为
iconv的程序来执行此操作,并且有库绑定可以从 Go 代码中调用 iconv 功能。我不确定哪个是最好的,但github.com/qiniu/iconv进行了搜索。不幸的是,我没有时间提出完整的步骤来在您的输入中使用它。