翻译自官方文档 version:8.0。
当服务器返回错误时,MySQL程序可以访问几种类型的错误信息。例如,mysql 客户端会以下格式显示错误:
显示的消息包含三种类型的信息:
-
一个数字错误码(1146)。这个数字是mysql特有的,不能移植到其他数据库系统。
-
一个5字符SQLSTATE('42S02')。这些值取自ANSI SQL和ODBC,并且更加标准化。不是所有的MySQL错误码都有相应的SQLSTATE值。在这些情况下,使用“HY000”(一般错误)。
-
一个消息字符串。提供错误可能原因的文本描述
对于错误检查,使用错误码,不要用消息字符串判断。错误码很少会变化,但也有可能修改。假设管理员修改了语言设置,就会影响错误消息的语言。
对于给定的MySQL系列的证书发行版(GA)本中,错误码是稳定的。在一个系列到正式发行状态之前,新的错误码可能还在开发和被修改。
服务器错误信息来自以下的源文件。有关错误信息定义方式的详细信息,请参阅 MySQL内部手册。
https://dev.mysql.com/doc/internals/en/
在MySQL安装目录 share/errmsg-utf8.txt 中:
-
消息字符串 的格式列表。%d 和%s 分别表示数字和字符串,它们在显示时被替换为消息值。
-
错误 值的列表。在MySQL源文件 include/mysqld_error.h 和include/mysqld_ername.h中定义和被替换为相应的 错误码
-
SQLSTATE 值的列表。在MySQL源文件
include/sql_state.h
中用于定义。
因为更新频繁,所以以下列出的错误信息,可能没有新版MySQL文件中的全面。
(略)
这里是4000多条错误信息的模版,用了格式化占位符%s和%d,翻译作用并不大。可在文末 阅读原文 查阅。
我们将目光投向两个文件,查找错误码1126。
在 include/mysqld_error.h 中
在 share/errmsg-utf8.txt 中
——看到棒子文我是震惊的。
我们发现在消息提示模版中,除了英语,还默认有很多其他语言,日语、韩语都有。如果大家都用英语,出于习惯统一的习惯这好说,可日韩就有独立的语言包。
MySQL完全开源,意味着任何人可以看到可以修改源码,我们也想有中文语言包的出现
发现/share下面有各个国家的语言包,打/share/english,出现了errmsg.sys
对于消息提示,多语言切换只是文本的不同。也就是说如果编辑一个chinese文件夹,在其中的errmsg.sys编辑出中文语言模版,再修改一些语言设置选项,中文语言包就能完成。
.sys是一种二进制文件,搜索用UItraEdit打开,看到了二进制源码。对于我这种只会Web开发的真是一筹莫展接下来想到了第二种方法,直接在errmsg-utf8.txt中替换eng中的英文为中文,可惜重启服务在结果中没有直接生效。猜测还是要读取.sys或者编译。
惆怅....
好遗憾,MySQL到现在还没有中文消息提示语言包
希望有能力读者看到能够共同解决掉这个问题。
因为中文的出现是——信仰