iT邦幫忙

2

Mysql 的錯誤訊息中文化

Mysql 的錯誤訊息,可以中文化嗎?
有時,出現錯誤訊息時,例如:

duplicate entry 'XXXX' for key 'YYYY'

我們設計師來看,當然沒問題,不就是鍵值重覆嘛?

但,若秀到前端給使用者看,那就比較不貼心了,使用者看不懂英文,秀了也是困擾。

有沒有辧法將MYSQL的錯誤訊息中文化呢?我希望是能由MYSQL本身去下手,而不是攔截後再加工。

Googel 了許多,還沒找到方法,有先進能提供意見或方向嗎?

混水摸魚 iT邦研究生 4 級 ‧ 2021-06-21 10:25:44 檢舉
你直接show資料庫的錯誤訊息有點危險哦,他有時候會顯示資料庫的欄位,一般來說我們在執行sql語法時,會去接它的狀態,如果是false就顯示資料庫錯誤,但真正的錯誤訊息會寫入你自已的log方便查修。
錯誤訊息是給工程師看的不是前端使用者哦。
那是給設計師看的,不該給用戶看,還企圖讓用戶看的懂咧

出現錯誤,大部份的可能都是程式的錯,而不是用戶的誤操作
ckp6250 iT邦好手 1 級 ‧ 2021-06-22 05:40:32 檢舉
以上二位說得是,
我疏忽了這個重點,
【錯誤訊息是給工程師看的不是前端使用者哦。】
【那是給設計師看的,不該給用戶看】

記住了!
1
rogeryao
iT邦大師 1 級 ‧ 2021-06-20 09:09:14
最佳解答
1.程式撰寫時把【防呆機制】考慮進去
2.把 Mysql 的錯誤訊息改成【使用者看得懂的訊息】:例如,料號 X123456 重覆 <料號是在你系統中定義的,不在 Mysql 內>
3.讓你的程式更人性化更友善,使用者就不會一直找你

請參閱 : MYSQL ERROR CODE 錯誤編號的意義
關鍵字 :【1048:欄位不能為空】,若是類似個人基本資料可能有 10 個空格要填,那麼此時如何知道是哪一個空格不能為空 ?

ckp6250 iT邦好手 1 級 ‧ 2021-06-20 09:40:10 檢舉

謝謝您。
目前的確是用這個方法,不過,有太多的mysql錯誤訊息,難以一一定義,所以,才想說有沒有直接由資料庫系統面來下手。

關鍵字 :【1048:欄位不能為空】,若是類似個人基本資料可能有 10 個空格要填,那麼此時如何知道是哪一個空格不能為空 ?

您說得有理,至於這個問題,我會用觸發程序去處理,自行引發錯誤,就可以自帶錯誤訊息了。

或許,到最後,恐怕得自食其力了。

rogeryao iT邦大師 1 級 ‧ 2021-06-20 10:07:18 檢舉

若【防呆機制】有做好的話,Mysql 的錯誤訊息應該不常出現;
但是它一旦出現,不要說使用者看不懂,可能你也看不懂,
那時大概雞飛狗跳了,根本不知發生甚麼事。

建議:儘可能做好【防呆機制】,別讓 Mysql Server 回傳錯誤。

ckp6250 iT邦好手 1 級 ‧ 2021-06-20 11:31:31 檢舉

謹受教。

2
一級屠豬士
iT邦大師 1 級 ‧ 2021-06-20 09:07:26

https://dev.mysql.com/doc/refman/8.0/en/error-message-language.html

By default, mysqld produces error messages in English, but they can be displayed instead in any of several other languages: Czech, Danish, Dutch, Estonian, French, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Norwegian-ny, Polish, Portuguese, Romanian, Russian, Slovak, Spanish, or Swedish.

沒看到中文部分. 是有個目錄會放訊息.但是具體格式就沒有去了解了.

PostgreSQL 有中文訊息,一般是中文環境就自動是中文訊息.我比較常用 LC_ALL=C psql 這樣方式讓他改用英文顯示.

ckp6250 iT邦好手 1 級 ‧ 2021-06-20 09:48:43 檢舉

謝謝殺豬大,

/usr/share/mysqll/語言/errmsg.sys

這個檔感覺很像是編譯後的錯誤訊息檔,但打開是亂碼,沒法直接去修訂,也如同您說的,根本沒有中文語言的目錄,不知從何下手。

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-06-21 09:08:27
ckp6250 iT邦好手 1 級 ‧ 2021-06-21 09:43:04 檢舉

謝謝指引。
感覺工程浩大,不敢輕舉妄動。

我要發表回答

立即登入回答