Tcl, 数据库插入 mysqlexec/db server: Incorrect string value:

问题描述 投票:0回答:1

几年来我一直有一个奇怪的问题。事情是这样的。

我运行 Rocky Linux(也发生在 CentOS 中),运行 Apache 2.4.53 和 MariaDB(mysql Ver 8.0.30 for Linux on x86_64(Source distribution)

我有一个 Tcl 脚本,它执行“curl”以从另一个站点检索数据。它采用 JSON 格式,然后我对其进行解析(使用 JSON 包)。然后我将数据插入数据库,例如:

insert into table set name='Mário Flores';

如您所见,有一个 UTF-8 字符 (á)。我有 utf8mb4 字符集的数据库,一切都设置正确,系统中的语言环境是“en_US.UTF-8”。

现在...如果我在我的 Linux 机器上运行脚本,就没有问题了。 如果我使用我的网站,我点击一个按钮,它向我的网络服务器(index.cgi)发送一个 POST,我得到一个错误:

Error: mysqlexec/db server: Incorrect string value: '\xE1rio...' for column 'name' at row 1

然后将运行“curl”以获取数据、解析 JSON 并插入到数据库中。代码是一样的,调用方式一样。

这里可能是什么问题?我只能在通过网络运行时解决问题:

set name [encoding convertto utf-8 $name]

然后插入到数据库中。

在 Linux 或网络上都尝试过,结果不同。期望一切都已经与 UTF-8 兼容并且不需要转换

mysql tcl utf8mb4
1个回答
0
投票

\xE1
听起来像 latin1,绝对不是 utf8。然后连接,设置client的字符集编码。或者,在连接后使用
SET NAMES latin1;

E1 是以下任何一个中 á 的十六进制:cp1250、dec8、latin1、latin2、latin5。

C3A1 是 utf8 / utf8mb4 中的下一个。

© www.soinside.com 2019 - 2024. All rights reserved.