CI 묻고 답하기

제목 mysql과 mariadb 에서 처리 결과가 다르게 나오네요..
글쓴이 좋은놈 작성시각 2013/10/16 22:14:22
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 29035   RSS

번에 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에서는 정상적으로 돌지요. 

 
 다음글 namespace가 있는 라이브러리 (2)
 이전글 데이터 조회 질문 (1)

댓글

에카 / 2013/10/17 03:01:53 / 추천 0
 phpmyadmin을 통해서도 잘 도는데, 혹시 DB 드라이버 문제가 아닐까 생각됩니다.
PDO혹은 mysqli로 변경해보시고 다시 시도해보세요
들국화 / 2013/10/17 10:11:22 / 추천 0
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/



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

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

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

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

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 

 


letsgolee / 2013/10/18 09:06:32 / 추천 0
 lower_case_table_names=1
좋은놈 / 2013/10/18 09:52:31 / 추천 0
 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>
들국화 / 2013/10/18 10:29:50 / 추천 0
좋은놈/ 오라클 같이 대소문자 구분을 하는가 보네요.
대문자든 소문자든 맞추는게 좋을듯 하네요. 오라클은 대문자로 잘 쓰니까요...
저는 쿼리문은 대문자 테이블명, 컬럼명은 소문자 이렇케 스려고 노력(?) 합니다.....

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