MySQL & MariaDB2017. 3. 20. 15:58

MySql과 MariaDB에서 Function을 사용 할때나 일반적인 쿼리를 사용 할경우 IFNULL을 사용할때가 있다.

이때 쿼리의 결과가 있는 경우와 없는 경우가 있는데..

쿼리의 결과가 있는 경우에는 IFNULL이 정상 작동해서 Null일 경우에 처리 되는 값이 정상적으로 처리가 된다.

하지만 쿼리의 결과가 1Row도 없을 경우에는 값이 제대로 나오지 않는다.

이럴경우에는 IFNULL을 사용하나 마인 상황이 발생한다.


IFNULL(MIN(컬럼), 0)

IFNULL(MAX(컬럼), 0)


위와 같이 IFNULL처리하는 컬럼에 MIN이나 MAX로 한번 감싸면 문제는 해결 된다.

IFNULL이 아니더라도 적어도 1개의 Row가 나와야 하는 상황이라면 MIN이나 MAX로 감싸도록 하자.



Posted by Z700zZz
MySQL & MariaDB2014. 12. 1. 16:49

Column count doesn't match value count at row 1


위와 같은 에러를 뿜는다면..


내가 실행하고 있는 컬럼의 갯수와 타입이 제대로 되어있는지 확인하면 된다.


어쩌다보니 MySQL까지 하고 있네..

'MySQL & MariaDB' 카테고리의 다른 글

데이터 암호화와 복호화..  (0) 2017.04.07
IFNULL..  (0) 2017.03.20
Posted by Z700zZz
Oracle2012. 6. 21. 12:11

현재 하고 있는 프로젝트를 빠르게 진행하다 보니 시작은 MySQL로 시작했다가 중간에는 Oracle로 바꿨다.


JDBC드라이버와 URL등을 다 바꾸고 쿼리 부분도 오라클에 맞게 수정을 해준 다음 해보면 에러가 발생 하였다.


Cannot create PoolableConnectionFactory (ORA-00923: FROM keyword not found where expected


위와 같은 에러.


에러 내용을 보면 알겠지만 FROM절 뒤의 키워드가 잘못됐다? 못찾겠다?


나는 분명 쿼리에 문제가 없고 그 쿼리를 SQL Developer에 넣어 돌려보면 정상적인 값이 나온다.


분명 쿼리에는 문제가 없다.


모든 방법을 다 동원해서 해봤지만 나오는 결과는 똑같았다.


검색을 해보면 쿼리가 잘못 됐다거나 오라클 방화벽 문제거나 리스너가 구동 되지 않은 상태에서 하면 저런 결과가 나온다는 말뿐.


그러다 검색된 결과가..


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
            p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}"
            p:password="${jdbc.password}"
            p:validationQuery="SELECT 1 FROM DUAL"
            p:testOnBorrow="true"
            p:testWhileIdle="true"
            p:timeBetweenEvictionRunsMillis="6000"
            p:removeAbandoned="true"
            p:removeAbandonedTimeout="60"/>


database-context.xml의 내용이다.


p:validationQuery="SELECT 1 FROM DUAL" 이게 문제였다.

Oracle이외의 DataBase는 SELECT 1을 쓴다고 한다.


Oracle로 변경을 하면서 저것을 바꿔주지 않으니 났던 에러였다.


SELECT 1이었던 값을 SELECT 1 FROM DUAL로 바꿔주니 아주 잘 된다.


이것 때문에 대체 얼마나 많은 시간을 소비한건지..-_-;;

Posted by Z700zZz
Linux2012. 6. 14. 23:01

CentOS6에 MySQL설치..!

어렵지 않다.

이것저것 검색을 해봤지만 제일 쉬운거로 해봤고 성공후 그 방법에 대해서 설명하려 한다.

CentOS에는 기본적으로 MySQL을 가지고 있다.

현재 사용중인 CentOS의 버전은 6.2.

기본적으로 포함되어 있는 MySQL의 버전은 5.1.

그럼 지금부터 설치 방법에 대해서 설명하겠다.

CentOS의 터미널을 열어 설치 하면 된다.

1. 설치하기.


실행해 보면 설치가 되는 패키지도 있고 이미 설치 된 패키지도 있는것을 확인할 수 있다.


하지만 설치가 안되는 패키지가 있다 하더라도 MySQL이 설치가 안되거나 실행이 되지 않는 일은 발생하지 않았다.


# yum install mysql-server

여기서 #은 [root@localhost-]# 의 #이다.

혹시나 저것까지 치는 사람이 있을까봐.

위와같은 명령어를 실행하면 알아서 패키지를 다운받고 설치가 시작된다.

2. 설치한 SQL서버 시작.

# service mysqld start

실행하고 1~2초를 기다리면 다음과 같은 메세지가 출력된다.

mysqld (을)를 시작 중:     [ OK ]

그럼 성공!!

쉽지 않은가??

3. root의 비번번호 설정 하기.

# mysql -u root -p

Enter Password : <---------- 다음과 같이 나오면 지체없이 Enter!! 우리는 비번을 설정한 적이 없다.

mysql> use mysql;

mysql> 은 위의  [root@localhost-]# 와 같은것.

use mysql은 mysql의 데이터 베이스를 사용하겠다는 명령어.

mysql> update user set password=password('사용할 비밀번호') where user='root';

user테이블의 root사용자의 비밀번호를 바꾸겠다는 명령어이다.

mysql> flush privileges;

MySQL의 사용자 테이블이 변경 되었을 때 변경 사항을 저장한다.

이로써 설치와 root계정 설정이 끝이 났다.


mysql> quit


mysql 명령어 이력을 종료하고 나와서 MySQL을 재시작한다.


# service mysqld restart


재시작 후 root 계정으로 재접속 해보면 비밀번호가 바뀌어 있는것을 확인 할 수 있다.


4. 한글 설정하기.


# whereis my


위의 명령어로 MySQL의 설정 파일이 어디에 있는지를 찾아 낸다.


# gedit 검색되어나온파일경로


실행 된 에디터에 다음의 내용을 입력한다.


[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-character-set=utf8
default-collation=utf8_general_ci
init_connect=set collation_connection=utf8_general_ci
init_connect=set names utf8
character-set-server=utf8
collation-server=utf8_general_ci
character-set-client-handshake=TRUE

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8
max_allowed_packet=64M

[mysqldump]
max_allowed_packet=64M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


컴퓨터에 설정 된 파일 모두를 긁어다 붙인 것이니 중복 되는 부분은 빼고 넣으면 된다.


위의 설정을 바꾸기전 실행 해서 확인 하고 위의 설정으로 바꾼다음 실행해서 확인해야 할 SQL문.


mysql> show variables like 'char%';


설정하기 전과 후를 비교해보면 캐릭터 셋이 UTF8로 바뀌어 있는것을 볼 수 가 있다.


MySQL공식 홈페이지에서 파일을 다운받아 설치 하려 하다 이런 방법이 검색되어 해보니 어렵지도 않고 너무 쉬웠다.


최신버전이 5.5로 알고 있는데 최신버전이 필요 없다면 이방법도 해보길 바란다. 쉽다!!

Posted by Z700zZz