Mysql 개행문자 - Mysql gaehaengmunja

개행 문자(newline character)는 텍스트의 한 줄이 끝났음을 나타내는 문자 또는 문자열입니다.

일반적으로 운영 체제(operating system, os)에 따라 개행 문자 코드가 다르기 때문에 다른 시스템으로 전송할 때 개행 문자의 치환 작업도 필요합니다.

이 포스트에서는 MySQL(mysql) 환경에서 개행 문자를 치환하는 방법에 대해 소개합니다.

요약(SUMMARY)

  1. 개행 문자 소개
  2. mysql 환경에서 개행 문자 치환

내용(CONTENTS)

1. 개행 문자 소개

  • 개행 문자는 새줄 문자, 줄바꿈 문자(line break), EOL(end-of-line), line ending과 같은 뜻입니다.
  • 윈도우 계열의 개행 문자는 CRLF(\r\n)이고, 16진수로 표현하면 “0d0a”입니다.
  • 유닉스 계열(리눅스 또는 맥OS)의 개행 문자는 LF(\n)이고, 16진수로 표현하면 “0a”입니다.

1.1. 라인피드(line feed, lf)

  • line feed는 새로운 행을 추가(new line feed)하는, 커서를 한 칸 아래로 이동하는 것을 의미합니다.
  • “\n”으로 표현하며, 아스키코드(ASCII)는 10번입니다.

1.2. 캐리지 리턴(carrige return, cr)

  • 캐리지 리턴은 시작 위치로 복귀(return)하는, 커서를 가장 왼쪽으로 이동하는 것을 의미합니다.
  • “\r”로 표현하며, ASCII는 13번입니다.

ASCII(American Standard Code for Information Interchange)에 대한 자세한 정보는 https://ko.wikipedia.org/wiki/ASCII 페이지를 참고하시기 바랍니다.

2. mysql 환경에서 개행 문자 치환

2.1. line feed(lf) 처리

SELECT REPLACE(lindarex_column, CHR(10),'') FROM lindarex_table;
SELECT REPLACE(lindarex_column, '\n', '') FROM lindarex_table;

2.2. carrige return(cr) 처리

SELECT REPLACE(lindarex_column, CHR(13),'') FROM lindarex_table;
SELECT REPLACE(lindarex_column, '\r', '') FROM lindarex_table;

2.3. crlf 처리

SELECT REPLACE(REPLACE(lindarex_column, CHR(13),''), CHR(10),'') FROM lindarex_table;
SELECT REPLACE(REPLACE(lindarex_column, '\n', ''), '\r', '') FROM lindarex_table;

마무리(CONCLUSION)

mysql 환경에 개행 문자를 치환하는 방법에 대해 간단히 소개했습니다.

개행 문자에 대한 더 자세한 내용은 아래 참고 페이지를 확인해 주시기 바랍니다.

참고(REFERENCES)

  • https://ko.wikipedia.org/wiki/새줄_문자
  • https://ko.wikipedia.org/wiki/MySQL

Mysql 개행문자 - Mysql gaehaengmunja

MySQL에서 SELECT 쿼리 사용 시

조회되는 값 중간에 개행을 시켜주고 싶다면

\n 을 추가해주면 되는데

concat을 사용해 넣어줘도 되고

아니면 문자열 안에 넣어도 줄바꾸기가 가능하다

예제에 사용한 쿼리는 아래와 같다

SELECT CONCAT('TEST1 : ', 'VALUE1', '\n',
              'TEST2 : ', 'VALUE2') AS TEST1
       , 'AA\nBB' AS TEST2

[MySQL] 테이블 필드의 공백, 개행문자, 캐리지리턴 제거

- 문제상황 -

csv파일을 MySQL 테이블에 밀어 넣고, select를 해본다.

shopname 필드로 조회를 하면 정상적으로 조회가 되지만,

tel필드로 조회를 해보면 조회가 되지 않는다.

이런 경우 문제는 대부분 특수문자 혹은 보이지 않는 공백이 삽입된 경우다.

그래서 아래와 같이 like를 활용하여 다시 한번 조회해보았다.

조회가 성공적으로 되었다.

문제가 명확해졌다.

뒤에 뭔가 있는 것이다.(확인하는 방법이 따로 있긴 하지만 귀찮다. 그냥 처리한다)

- 해결책 - 

그럼 이제 공백, 탭, 라인피드, 캐리지리턴 등을 제거하는 법을 알아보자.

필드값 변경 함수

replace(필드명, 변경할 문자, 변경될 문자)

- '필드명'에 해당하는 레코드에서 '변경할 문자'를 모두 '변경될 문자'로 변경한다.

1. 공백제거(앞/뒤의 공백을 제거한다)

- update table set field = replace(field, ' ', '');

* table은 테이블명, field는 필드명이다. 

2. 개행문자 제거

- update table set field = replace(field, '\r\n', '');

3. 탭( Tab - char(9) ) 제거

- update table set field = replace(field, char(9), '');

- field 값에 탭(char(9))이 있다면, 없애서('') 레코드 값을 수정하라.

4. 라인피드(Line Feed) 제거

- update table set field = replace(field, char(10), '');

- field 값에 라인피드(char(10))이 있다면, 없애서('') 레코드 값을 수정하라.

5. 캐리지리턴(Carriage Return) 제거

- update table set field = replace(field, char(13), '');

- field 값에 캐리지리턴(char(13))이 있다면, 없애서('') 레코드 값을 수정하라.

이쯤 되면 응용도 가능하다. 

6. 하이픈( - ) 제거

- update table set field = replace(field, '-', '');

직접 캐리지 리턴 제거를 수행해보았다.

정상적으로 조회가 된다! 

공백 제거의 경우 trim(), ltrim(), rtrim()함수를 사용할 수도 있다.

- trim()함수를 사용하는 법 : update table set field = trim(field);

이렇게 해도 안 된다면 

직접 생각해보고 구글링을 해보면서 찾아보시면 좋을 것 같습니다.

감사합니다.