뒤늦게 한글 인코딩에 관해 질문합니다.

litdream의 이미지

예전에 이런 질문(http://kldp.org/node/118575)을 한적이 있는데, 비슷하지만, 다른 문제에 다시 직면해서 질문드립니다. Zeroboard XE 를 사용합니다.
( 제가 한글인코딩을 이제와서야 뒤늦게 고생중입니다. )

일단 잘 되는 웹사이트에서 테이블 하나를 백업에서 복구했더니, 한글이 깨졌습니다. 전의 질문처럼 UTF-8 -> cp949 -> UTF-8 인코딩 된듯 보입니다. (아직 확실한건 아닙니다. )

utf-8 덤프화일을 "mysql database_name < dump_file" 하고나서 문제가 생겼습니다. 터미널의 $LANG 변수는 ko_KR.UTF-8 입니다. 데이터 베이스도 utf-8 으로 설정되어 있는데, 어디서 인코딩 체인이 안맞은건지 알수가 없습니다.

일단 조사한것들을 써보면 다음과 같은데, 혹시 제가 더 뒤져봐야 할곳이 있다면, 조언 부탁드립니다.

1. 덤프화일은 일단 UTF-8 인코딩이고, 제 터미널에서 한글이 잘 보입니다.

rchung@rchung-Inspiron-1521:~/kmcc$ file backup.sql
backup.sql: UTF-8 Unicode text, with very long lines

2. 제대로 보이는 테이블인 경우, 막상 mysql client 에서 select 를 하면 ?? 로 보입니다. 문제는 터미널 스크린에서 잘보이는 데이터가 웹페이지에서는 잘 안보인다는 겁니다.

mysql> select nick_name from jj_member where member_srl in (4,183);
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    16901691
Current database: kmcckmcc_db2
 
+-----------+
| nick_name |
+-----------+
| ??        |  // 이게 user 입장에서는 잘 저장된 형태입니다.
| ??? ??    |
+-----------+
2 rows in set (0.00 sec)
 
 
mysql> select nick_name from jj_member_test2 where member_srl = 4;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    16958042
Current database: kmcckmcc_db2
 
+-----------+
| nick_name |
+-----------+
| 웹팀    |    // 이 데이타는 유저의 브라우저에서,  'ê°•ê°•ê°•' 이런 식으로 보입니다.  
+-----------+
1 row in set (0.00 sec)

3. 그래서, 혹시 character_set_client 가 latin1 인게 문제인가 의심이 가기는 합니다만, 웹사이트가 호스팅에 있어서 정확한 reproduce 가 쉽지는 않습니다.

mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | latin1 |
| character_set_connection | latin1 |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | latin1 |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+
7 rows in set (0.00 sec)

4. 아예 테이블 구성을 다보자고 했을때 다음과 같습니다. 일단 인코딩은 utf-8 으로 되고 있습니다.

mysql> show create table jj_member;
 
| jj_member | CREATE TABLE `jj_member` (
 `member_srl` bigint(11) NOT NULL,
 `user_id` varchar(80) NOT NULL,
 `email_address` varchar(250) NOT NULL,
 `password` varchar(60) NOT NULL,
 `email_id` varchar(80) NOT NULL,
 `email_host` varchar(160) DEFAULT NULL,
 `user_name` varchar(40) NOT NULL,
 `nick_name` varchar(40) NOT NULL,
 `homepage` varchar(250) DEFAULT NULL,
 `blog` varchar(250) DEFAULT NULL,
 `birthday` char(8) DEFAULT NULL,
 `allow_mailing` char(1) NOT NULL DEFAULT 'Y',
 `allow_message` char(1) NOT NULL DEFAULT 'Y',
 `denied` char(1) DEFAULT 'N',
 `limit_date` varchar(14) DEFAULT NULL,
 `regdate` varchar(14) DEFAULT NULL,
 `last_login` varchar(14) DEFAULT NULL,
 `is_admin` char(1) DEFAULT 'N',
 `description` text,
 `extra_vars` text,
 `change_password_date` varchar(14) DEFAULT NULL,
 `find_account_question` bigint(11) DEFAULT NULL,
 `find_account_answer` varchar(250) DEFAULT NULL,
 `list_order` bigint(11) DEFAULT NULL,
 PRIMARY KEY (`member_srl`),
 UNIQUE KEY `unique_user_id` (`user_id`),
 UNIQUE KEY `unique_email_address` (`email_address`),
 UNIQUE KEY `unique_nick_name` (`nick_name`),
 KEY `idx_email_host` (`email_host`),
 KEY `idx_allow_mailing` (`allow_mailing`),
 KEY `idx_is_denied` (`denied`),
 KEY `idx_regdate` (`regdate`),
 KEY `idx_last_login` (`last_login`),
 KEY `idx_is_admin` (`is_admin`),
 KEY `idx_list_order` (`list_order`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |

경험 있으신분들 부탁드립니다.

litdream의 이미지

자답입니다.

dump 화일을 그냥 mysql 에 넣으면 안되고, --default-character-set="utf8" 을 지정해 주어야 했었습니다.
즉,

$ mysql --default-character-set="utf8" database_name < dump_file

2번에서 의심했듯이, mysql client 가 latin 이다보니, 유니코드를 유니코드로 해석하지 않았다고 보여집니다.
한글 다루기 어렵네요.

삽질의 대마왕...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.