如何解析 MySQL 错误

Posted

技术标签:

【中文标题】如何解析 MySQL 错误【英文标题】:How to parse MySQL errors 【发布时间】:2021-12-20 12:07:46 【问题描述】:

我正在尝试解析 mysql 错误,以便从 Go API 向用户返回干净的错误消息。

我阅读了一些类似 this one 的文章,其中显示了我想做的事情,但看起来我正在使用的模块 go-mysql-driver 不支持 parseError。

举个具体的例子,有错误:

Error 1062: Duplicate entry 'John' for key 'name_UNIQUE'

我希望能够构建一个数据结构,让我能够组织信息以返回用户友好的消息,例如

Error with the field 'name': 'John' already exist"

所以我也可以将它翻译成不同的语言,并将准备使用的错误消息发送回客户端。

谢谢!

【问题讨论】:

我不知道是什么让您认为 MySQL 驱动程序会返回 CSV Reader 错误代码。 那么,应用程序通常如何向用户打印一条好消息?我的意思是,有成千上万个可能的错误...... 【参考方案1】:

我在packets.go和driver_test.go发现了一些提示

例子:

me, ok := err.(*mysql.MySQLError)
if !ok 
    return err

if me.Number == 1062 
    return errors.New("It already exists in a database.")

return err

me.Number 的可能值可以在mysql documentation 中找到

【讨论】:

您也可以使用简写形式if err.(*mysql.MySQLError).Number == MYSQL_KEY_EXITS ... (此处为1062 使用const/define) 找这个信息大约一个小时了,谢谢你的回答!还找到了MySQLErrorgodoc【参考方案2】:

该错误直接来自服务器,几乎您必须自己解析错误字符串 (err.Error())。

【讨论】:

@Adrien 很遗憾并非如此,您必须找到所有 mysql 错误的列表,并为每个代码使用不同的解析器(或正则表达式)。 为什么这被否决了,这是唯一正确的答案。因为您需要从错误号中不存在的字符串(字段名称等)中获取信息(显然)。不喜欢答案(这是正确的)不是拒绝投票的理由......

以上是关于如何解析 MySQL 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 解析数据插入 MYSQL

phpMyAdmin 中的 MySQL 解析错误(“这种类型的子句以前被解析过”)

由于 MySql 连接器 C++,如何修复未解析的外部符号?

mysql日志详细解析

MySQL主从多种架构部署及常见错误问题解析

从 C++ 连接 MySQL:错误 LNK2001:未解析的外部符号 [重复]