英文:
Dealing with spanish tilde in Golang
问题
所以我正在尝试使用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 |
英文:
So I'm trying to enter this string into a mysql database using a sql driver. I get this error -
Do?a Merced Elementary
panic: Error 1366: Incorrect string value: '\x96a Mer...' for column 'name' at row 1
I thought about excluding this entry, but haven't been able to do so. I've tried -
if !strings.ContainsAny(splitStr[2], "U+0303") {
if !strings.ContainsAny(splitStr[2], '\x96') {
but that has not worked.
It would be better to have mysql deal with this, but I'm not sure how.
Any suggestions?
EDIT
This is how I connect to my db
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())
}
This is where my issue comes
districtResult, err := db.Exec("INSERT INTO districts(name) VALUES(?)", strings.TrimSpace(splitStr[2]))
check(err)
Output of 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 |
答案1
得分: 0
你是在使用苹果电脑吗?我猜你原本想说的是Doña Merced Elementary
吧?但是,要从x96得到ñ
,你必须先使用"MacRoman"编码的文本。
一个简单的解决方案可能是在连接到MySQL后立即执行SET NAMES macroman
命令。
英文:
Running on an Apple? I assume that should have said Doña Merced Elementary
? Yet, to get ñ
from x96, you must have started with text in the "MacRoman" encoding.
The simple solution might be to do SET NAMES macroman
right after connecting to MySQL.
答案2
得分: 0
请将排序规则更改为utf8_general_ci
。应该可以正常工作。
英文:
Please change collation to utf8_general_ci
. it should work
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论