MySQL 에러메시지 언어 설정

Setting the Error Message Language 에러메시지 언어 설정하기

에러메시지를 우리말로 보고 싶은 경우 사용할수 있는 옵션을 확인해봅시다.

default로 mysqld 의 에러 메시지는 영어로 나옵니다. 하지만 다양한 언어로 변경해서 볼수 있습니다. : Czech, Danish, Dutch, Estonian, French, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Norwegian-ny, Polish, Portuguese, Romanian, Russian, Slovak, Spanish, or Swedish. MySQL 5.6에서는, 다음 location의 error message file를 참조합니다.

  1. lc_messages_dir 디렉터리 이하 lc_messages에 설정된 언어에 해당하는 디렉터리내의 error message file. 만약 다음과 같이 인스턴스가 실행되었다면, shell> mysqld –lc_messages_dir=/usr/share/mysql –lc_messages=fr_FR 에러 메시지 파일은 /usr/share/mysql/french directory에 존재합니다.
  2. 만약 해당 directory에 파일이 없다면, lc_messages의 값을 무시하고 lc_messages_dir을 찾습니다.

관련 System Variable

  • lc_messages_dir은 global variable이고 read only입니다.
  • lc_messages는 global/session variable이고 dynamic하게 변경가능합니다.
    • 즉, error message language는 실행중에 변경가능하고 각각의 client가 각각 lc_messages값을 설정함으로서 각자 다른 message를 볼수 있습니다.  

한국어로 설정해봅시다.

mysql> show variables like '%message%';
+-----------------+-----------------------------------------------+
| Variable_name   | Value                                         |
+-----------------+-----------------------------------------------+
| lc_messages     | en_US                                         |
| lc_messages_dir | /db/mysql-5.6.19-linux-glibc2.5-x86_64/share/ |
+-----------------+-----------------------------------------------+
2 rows in set (0.00 sec)

mysql>  select * from zzzz;
ERROR 1046 (3D000): No database selected
mysql> use dsfsfa;
ERROR 1049 (42000): Unknown database 'dsfsfa'

시스템 온라인상태에서 세션레벨 파라메터만 변경하는 테스트

mysql> SET lc_messages = 'ko_KR';


mysql> show variables like '%messages%';
+-----------------+-----------------------------------------------+
| Variable_name   | Value                                         |
+-----------------+-----------------------------------------------+
| lc_messages     | ko_KR                                         |
| lc_messages_dir | /db/mysql-5.6.19-linux-glibc2.5-x86_64/share/ |
+-----------------+-----------------------------------------------+
2 rows in set (0.01 sec)



mysql>  select * from zzzz;
ERROR 1046 (3D000): C120D0DDB41C B370C774D0C0BCA0C774C2A4AC00 C5C6C2B5B2C8B2E4.

오잉 이렇게 나온다면? 이경우에는 에러메시지를 character_set_results 에 지정된 캐릭터셋으로 표현할수가 없는 경우입니다.

mysql> show variables like '%char%';
+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | latin1                                                 |
| character_set_connection | latin1                                                 |
| character_set_database   | latin1                                                 |
| character_set_filesystem | binary                                                 |
| character_set_results    | latin1                                                 |
| character_set_server     | latin1                                                 |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /db/mysql-5.6.19-linux-glibc2.5-x86_64/share/charsets/ |
+--------------------------+--------------------------------------------------------+
8 rows in set (0.00 sec)

역시 latin1으로 되어있었네요. utf8로 변경하고 테스트해봅시다.

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from zzzz;
ERROR 1046 (3D000): 선택된 데이타베이스가 없습니다.
mysql> use dsfsfa;
ERROR 1049 (42000): 데이타베이스 'dsfsfa'는 알수 없음

아름다운 우리말이 나오네요.

mysql> select * from mysql.user limitas 1;
ERROR 1064 (42000): 'SQL 구문에 오류가 있습니다.' 에러 같읍니다. ('1' 명령어 라인 1)

아쉽게도 정확한 표현을 구사하진 못하지만요.

글로벌레벨 파라메터 변경하는 테스트

my.cnf 에 lc_messages=ko_KR 추가. (캐릭터셋 설정도 보너스로)

character-set-filesystem=utf8
character-set-server=utf8
collation_server=utf8_bin
lc_messages=ko_KR



[mysql@myvm1 5.6]$ ./bin/mysqladmin shutdown -uroot  --socket=/tmp/mysql56.sock
[mysql@myvm1 5.6]$ ./bin/mysqld_safe --defaults-file=/db/5.6/conf/my.cnf --user=mysql &
[mysql@myvm1 5.6]$ ./bin/mysql -uroot --socket=/tmp/mysql56.sock
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.6.19-log MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> select * from mysql.user limitas 1;
ERROR 1064 (42000): 'SQL 구문에 오류가 있습니다.' 에러 같읍니다. ('1' 명령어 라인 1)
mysql> show variables like '%messages%';
+-----------------+-----------------------------------------------+
| Variable_name   | Value                                         |
+-----------------+-----------------------------------------------+
| lc_messages     | ko_KR                                         |
| lc_messages_dir | /db/mysql-5.6.19-linux-glibc2.5-x86_64/share/ |
+-----------------+-----------------------------------------------+
2 rows in set (0.00 sec)
References