제목 | 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에서는 정상적으로 돌지요. |
|||
다음글 | namespace가 있는 라이브러리 (2) | ||
이전글 | 데이터 조회 질문 (1) | ||
에카
/
2013/10/17 03:01:53 /
추천
0
|
들국화
/
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이 디폴트 이네요. 테스트해 보니 리눅스 서버에서 테이블 명은 대소문 자 구분을 하네요... |
PDO혹은 mysqli로 변경해보시고 다시 시도해보세요