오늘은 ascii 함수와 char 함수에 대해서 알아보겠습니다. 각각, 문자를 ascii 코드 값으로, ascii 코드 값을 문자로 변환하는 함수입니다. 사용법은 그리 복잡하지 않으니 예제를 먼저 보도록 하겠습니다.

 

 


 먼저, ascii 함수 먼저 보겠습니다. 문자를 넣으면, 그에 맞는 아스키 코드 값이 리턴이 되는데요. 당연하게도 다중 바이트 문자인 '가'와 같은 것은 쓸 수 없습니다.

 

 

 먼저 'a'와 'A'의 ascii 코드 값을 뽑아봅시다.

 

 

 그러면 97과 65가 나옵니다. 소문자와 대문자의 코드 값 차이는 32임을 알 수 있어요. 소문자만 들어오면 ch - 'a' + 1이 문자 값이 되고, 대문자만 들어온다면 ch - 'A' + 1이 문자의 값이 됩니다. 이는 'a'부터 'z'까지, 'A'부터 'Z'까지 코드값이 연속적이기 때문입니다. 예를 들자면 'b'의 코드값은 98이고, 'C'의 코드값은 67입니다.

 

 

 숫자들도 봅시다. '0'과 '9'의 값을 뽑아 봅시다.

 

 

 그러면 각각 48, 57이 나옵니다. 수만 들어있는 문자열에서 int로 변환할 때, ch - '0'의 값을 수로 씁니다. 이는 '0'부터 '9'까지의 코드값이 연속적이기 때문입니다. '9'의 값이 48 + 9 = 57인것만 봐도 짐작이 가실 거에요.

 

 

 이제 '가'에 대해서 봅시다. 이것은 1byte로 커버되는 문자가 아닙니다. 이를 다중 바이트 문자라고 하는데요. ascii 함수는 이것에 대해서 처리를 하지 못해요.

 

 

 결과 값을 보면 234가 나왔음을 알 수 있는데요. 어디선가 값이 잘못되었음을 알 수 있어요.

 

 


 아스키 코드값을 문자로 바꾸는 함수는 char입니다. 역시 이것도 예제를 통해서 간단하게 알아보겠습니다. 아스키 코드값으로 50인 것은 '2'입니다. '0'이 48번이고, '1'이 49번이니까, '2'는 50번임을 알 수 있습니다.

 

 

 이 쿼리를 실행해 봅시다.

 

 

 그러면 왠 BLOB 객체가 나타납니다. 왜 그런지 잘 모르겠지만 당황스럽습니다. viewer로 값을 봅시다.

 

 

 

 그러면, text 값이 2임을 알 수 있습니다. 결과 값에 BLOB이 나오는 경우에, 이것을 강제로 Cast 할 수 있는 방법이 있습니다.

 

 

 cast(A as B)는 A라는 것을 B라는 type으로 변환시킨 것을 리턴합니다. char(50)을 char로 변환합니다.

 

 

 그러면 아까와는 다르게, BLOB 대신에 2가 출력됩니다.

 

 

 물론, char 함수에 인자 여러개를 넣을 수도 있습니다. 예를 들어 48, 49, 50, 51을 넣으면 각각 이것은 문자 '0', '1', '2', '3'의 값입니다. 그러므로 결과값은 '0123'이 나오게 됩니다.

 

 

 여기까지만 보셔도 충분하실 듯 싶습니다.