mysql为什么没有中文提示语言包

699 阅读3分钟
原文链接: mp.weixin.qq.com

翻译自官方文档 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到现在还没有中文消息提示语言包

希望有能力读者看到能够共同解决掉这个问题。

因为中文的出现是——信仰