如何解析 MySQL 错误

Posted

技术标签:

【中文标题】如何解析 MySQL 错误【英文标题】:How to parse MySQL errors 【发布时间】:2016-11-24 10:35:31 【问题描述】:

我正在尝试解析 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 ... (这里使用 const/define 表示 1062 找这个信息大约一个小时了,谢谢你的回答!还找到了MySQLErrorgodoc【参考方案2】:

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

【讨论】:

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

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

如何将 JSON 解析数据插入 MYSQL

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

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

mysql日志详细解析

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

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