Go 将非 ascii 形式的值保存为问号
Go non-ascii form values saved as question marks
我正在使用 Go sqlx package 对 MariaDB 数据库进行查询,我希望能够将非 ascii 表单提交的值保存到数据库中。
函数如下:
func QuoteCreate(content string, author string) error {
var err error
fmt.Println("content, author", content, author)
_, err = database.SQL.Exec("INSERT INTO quote (content, author) VALUES (?,?)", content, author)
if err != nil {
fmt.Println(err)
}
return standardizeError(err)
}
quote
tables 具有 utf8_general_cli
整理和 InnoDB
引擎。但是,当值不是 ascii 字符(我尝试了波斯语和简体中文)时,表单提交的 content
和 author
值将保存为 ???
。
我也试过 utf8_unicode_cli
的 table 整理,但遇到了同样的问题。有趣的是,非 ascii 字符在保存前在终端上打印时正确显示。
所以我不知道这里出了什么问题,我该如何解决?
我不知道为什么,但这些解决了问题:
ALTER DATABASE mydb CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE quote CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
我正在使用 Go sqlx package 对 MariaDB 数据库进行查询,我希望能够将非 ascii 表单提交的值保存到数据库中。
函数如下:
func QuoteCreate(content string, author string) error {
var err error
fmt.Println("content, author", content, author)
_, err = database.SQL.Exec("INSERT INTO quote (content, author) VALUES (?,?)", content, author)
if err != nil {
fmt.Println(err)
}
return standardizeError(err)
}
quote
tables 具有 utf8_general_cli
整理和 InnoDB
引擎。但是,当值不是 ascii 字符(我尝试了波斯语和简体中文)时,表单提交的 content
和 author
值将保存为 ???
。
我也试过 utf8_unicode_cli
的 table 整理,但遇到了同样的问题。有趣的是,非 ascii 字符在保存前在终端上打印时正确显示。
所以我不知道这里出了什么问题,我该如何解决?
我不知道为什么,但这些解决了问题:
ALTER DATABASE mydb CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE quote CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;