질문 Q #10880
mysql과 mariadb 에서 처리 결과가 다르게 나오네요..
좋은놈 2013-10-16 22:14:22

번에 mysql 에서 mariadb로 변경하였습니다. 

일반적인 SELECT 쿼리에서는 문제없이 똑같이 나오는데.. 

아래와 같이 레코드 순번을 얻는 쿼리를 하면 결과가 나오지 않네요..
(loop를 돌리면 레코드 갯수만큼 도나 값이 없음)

SELECT @rank := @rank+1 AS rank  , sub.uid, sub.name 
FROM ( SELECT @rank:=0 ) rank,
            ( select uid, name FROM user where yy = 2013 ) sub
order by  uid

아래 두방법으로 전부 해보았으나 값이 표출되지 않네요.. 
$query1->result_array()  ,  $query1->result()

혹시 아시는분.. 

ps. toad  for mysql 이나 linux mysql에서는 정상적으로 돌지요. 

 
답변 9
#1 에카 2013-10-17 03:01:53
 phpmyadmin을 통해서도 잘 도는데, 혹시 DB 드라이버 문제가 아닐까 생각됩니다.
PDO혹은 mysqli로 변경해보시고 다시 시도해보세요
#2 들국화 2013-10-17 10:11:22
MariaDB는 안써 보기는 했는데... 써보고 싶네요....
SELECT (@rank:=@rank+1) AS rank  , sub.uid, sub.name 
FROM ( SELECT @rank:=0 ) rank, 
            ( select uid, name FROM user where yy = 2013 ) sub
order by  uid
이렇케 한번 해 보세요. 
그래도 안되면 php5에서 알려진 설치 이슈가 있네요. 확인 해 보세요.

https://mariadb.com/kb/en/installation-issues-with-php5/



#3 좋은놈 2013-10-17 15:24:34
질문했던 사람입니다.  해결했습니다. 
mysqli 등을 신규로 설치해서 돌려보았으나 값이 나오지 않았습니다. 

혹시나 싶어서. var_dump 를 해보았더니.. 
결과 필드명이 대문자로 나와서 문제가 발생하였습니다.  --;
위의 경우 rank, UID, NAME 으로 조회해야 값이 표출됨(대소문자가 중복되어... $row->rank, $row->UID... )
혹시나 싶어 SELECT * 로 처리해서 해보았더니. 역시 대문자로 조회해야 하던군요.. (전부 대문자 RANK, UID, NAME..)
mysql에서는 잘 돌던 프로그램이라 생각지도 못하였는데.. 
mariadb 쓸때는 조심해야 겠네요.. 

도움을 주셨던 위의 두분 감사합니다~~
#4 한대승(불의회상) 2013-10-17 15:35:41
좋은놈/ 좋은 정보 감사 합니다.
마리아 DB는 컬럼명도 대/소문자 구분을 하는가 보군요.
다음에 사용하게 될때 큰 도움이 되겠습니다.
#5 들국화 2013-10-17 16:19:28
좋은놈/ DB 테이블 생성할때 컬럼명을 대문자로 하신거에요?

대문자로 한게 아니면 다른 Client에서 쿼리 날려도 대문자로 나오나요?
#6 좋은놈 2013-10-17 17:55:26
좋은놈 입니다. 
들국화님 질문을 듣고 몇가지 실험을 해보았습니다. 
정확한건 아니겠지만.. 하였튼.. 

select * from table_name;  와 같은 쿼리일때

    mariadb - 생성한 DDL 컬럼명 대소문자에 따라 다르게 나옴. 
    mysql - 결과는 소문자로 나옴. (무조건)

확인해보니 들국화님 말씀대로 mariadb를 대문자로 만들어져 있어서,
두 DB에서 대문자/소문자로 각각 생성해서 테스트 해보았습니다. 

참고로. 두 DB 설치는 아래의 조건으로 했습니다. (CI : 2.1.4, MariaDB : 5.5,MySQL : 5.5)
cmake .. \
-DCMAKE_INSTALL_PREFIX=/opt/MariaDB5 \
-DMYSQL_DATADIR=/opt/MariaDB5/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATI \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system 

 


#7 letsgolee 2013-10-18 09:06:32
 lower_case_table_names=1
#8 좋은놈 2013-10-18 09:52:31
 letsgolee 님 .. 그 설정이 되어있는데도 그러네요..

참고로 my.cnf 파일 일부입니다. 
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
lower_case_table_names=1
# Try number of CPU's*2 for thread_concurrency
thread_c>
#9 들국화 2013-10-18 10:29:50
좋은놈/ 오라클 같이 대소문자 구분을 하는가 보네요.
대문자든 소문자든 맞추는게 좋을듯 하네요. 오라클은 대문자로 잘 쓰니까요...
저는 쿼리문은 대문자 테이블명, 컬럼명은 소문자 이렇케 스려고 노력(?) 합니다.....

lower_case_table_names 이값은 이름으로 봐서는 테이블 명 아닌가요?
찾아보니 linux 는 0 windows 는 1이 디폴트 이네요.
테스트해 보니 리눅스 서버에서 테이블 명은 대소문 자 구분을 하네요...