혹시 디비 전문가 계십니까? > 자유게시판

자유게시판

혹시 디비 전문가 계십니까? 정보

혹시 디비 전문가 계십니까?

본문

안녕하세요 유창화입니다.

 

저는 디비는 그렇게 깊게 알지 못하는 사람입니다.

 

그래서 강좌를 진행하면서 어설픈 선지식 보다는

 

정확한 정보 전달을 위하여 조언을 구하고자 합니다.

 

예 ) SET SESSION sql_mode = '';

 

1. SESSION​ 이 의미 하는 바는 무엇입니까?

 

2. sql_mode​ 로 들어갈수 있는 값들에는 어떤것이 있으며,

그것들을 설정함으로 인해서 mysql 에서 어떤 처리 변화가 있는지 상세 하게 알고 싶습니다.

 

 

읽어주셔서 감사합니다.

 

 

추천
0

댓글 12개

디비의 전문가는 아니지만
검색으로 나온 결과는 전달해드릴께요.

http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01_1&m_no=22283&cat1=752&cat2=790&cat3=868&lang=k
1.session 은 해당 세션변수를 의미합니다. 각 클라이언트가 mysql 서버에 접근할때마다 실행이 되며
  위와 같이 선언하거나 또는 my.cnf 파일에서 sql_mode 를 추가해서 글로벌 변수로 사용할수 있습니다

2. sql_mode 에 들어가는 값들은 종류가 많아서
  http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html  여기를 보시거나
  번역판인 http://www.mysqlkorea.com/sub.html?mcode=develop&scode=01&lang=k&m_no=21330&cat1=5&cat2=120&cat3=138 여기를 참조하시면 됩니다.
찾아보니 mysql 5.6.6 버전부터 sql_mode 가 설정되어서 들어간거군요..

if(version_compare(mysql_get_server_info(), '5.6.6', '>=')  == 1) {
    @mysql_query("SET SESSION sql_mode = ''");
    $mysql_set_mode = 'true';
}

http://ncube.net/10496
http://egloos.zum.com/ndba/v/3443114

위에 링크에 설명 잘되어 있습니다.

덕분에 하나 배우고 가네요~ 감사합니다.
선생님 지식으로 선생님께서 표현을 하신다면..
이는 곧.. 현재로서는 정답입니다.
5.1 MySQL 자료를 모를리 없으셔서요..

세션만 들어가면 근접을 못합니다.
정규식만 들어가도 통 모르겠습니다. 너무 부족합니다.
강좌.. 선생님 지식과 마음으로 표현해 주세요..
더 이상.. 바랄 것이 없습니다.
그저.. 죄송하고, 감사하고.. 너무 고맙고..
이것이.. 진심입니다.

고맙습니다.
MYSQL 서버의 환경설정값을 바꾸는 거에요. 해당 mysql 연결에서만 적용되는 것.
SET SESSION 환경설정이름 = '값';  으로 쓰고 설정을 바꿉니다. 모두 되는 건 아니고 허용되는 설정값들이 있어요.

보통 SET SESSION old_passwords = TRUE, 이나 SET SESSION time_zone = '+09:00' 만 쓰이는 것 같아요.

예제)
SELECT NOW();            //  SET SESSION time_zone = '+09:00' ;  SELECT NOW();
SELECT PASSWORD('aa');      //  SET SESSION old_passwords = TRUE;  SELECT PASSWORD('aa');
디비 연결시 sql-mode 를 초기화해주는 주된 이유는 mysql 서버 설정에서 sql-mode 에 STRICT_ALL_TABLES, STRICT_TRANS_TABLES 옵션을 끄기 위해서 입니다.

strct 모드로 동작하면 쿼리에 대해 엄격한 검사를 하므로, 필드 타입이 맞지 않거나 필드 길이보다 데이터가 길게 들어간 경우 등 모두 에러가 발생합니다.

따라서 서버에 따라 위 값들이 기본 활성화되어 있는 경우, 서버 설정을 변경하지 않고 디비 연결에서 해당 값을 제어하는 형태입니다. 

'set names utf8' 쿼리처럼 서버 설정 변경없이, 디비 연결단에서 제어하는 형태와 유사합니다.

참고) https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_strict_trans_tables


즉, 위 답변처럼 mysql 버전이 5.6.6 이상일 때 체크하는건 잘못된 방법이고요.  (5.0.2 부터 지원하는 기능임)
꼭 필요하다면 다음 쿼리를 통해 현재 값을 가져와 비교해야 합니다.

select @@sql_mode;
전체 348 |RSS
자유게시판 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT