【问题标题】:Dealing with spanish tilde in Golang在 Golang 中处理西班牙波浪号
【发布时间】: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 进行了搜索。不幸的是,我没有时间提出完整的步骤来在您的输入中使用它。

标签: mysql utf-8 go


【解决方案1】:

请将排序规则更改为utf8_general_ci。它应该工作

【讨论】:

【解决方案2】:

在 Apple 上运行?我认为应该说Doña Merced Elementary?然而,要从 x96 获取 ñ,您必须从“MacRoman”编码的文本开始。

简单的解决方案可能是在连接到 MySQL 后立即执行SET NAMES macroman

【讨论】:

  • 我这样做了,它说 0 行受到影响
  • 这表明宏指令是 client 端的编码。那么,也许数据已经存储错误了?请运行SELECT col, HEX(col) FROM tbl WHERE ... 以查看表格中的实际内容。
  • 找到“mysql命令行工具”或“phpmyadmin”。构造一个类似于我所写的SELECT 语句,但指向Doña。运行。报告您所看到的。
  • 让我们看看你用来连接数据库的代码。
  • 表中没有Dona-这是我第一次插入,我将发布用于连接和插入db的go代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2013-07-22
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多