mysql 설치하고 한글 깨짐 발생

mysql >  status; 해보면 캐릭터셋이 저 모양이다.

 

설치 폴더(C:\Program Files\MySQL\MySQL Server 5.7)에 my.ini 파일을 찾아서 수정하면 된다고 하는데..

근데.. 파일이 없다. 한참 찾았다. 그래도 안보인다. OTL

만들어도 봤다.... 안된다.

아~ 놔 @,.@

 

파일은 여기 있었다.

C:\ProgramData\MySQL\MySQL Server 5.7

 

근데 저 폴더가 안보인다. 

눈을 씻고 찾아봐도 안보인다.

근데 저 경로를 입력하면 보인다. 

 

보기탭에서 숨긴 항목 체크해주면 보인다.

한참 찾았네..

 

이제 설정을 바꿔줘야지 my.ini를 열고

뭐가 잔뜩 써있다.

 

그 중 주석으로 되어있는 기본 문자셋서버 문자셋utf8로 변경하면 된다.

앞에 # 은 주석이라는 의미 # 을 지우고 뒤에 utf8 이라고 적는다.

 

#default-character-set=
default-character-set=utf8


#character-set-server=
character-set-server=utf8

 

서비스 열고 

Mysql57 서비스를 재시작한다.

 

 

변경되었는지 확인해본다.

 

이제 한글 잘 된다.

 

my.ini 변경하면서 

Mysql57 서비스 시작중 오류 1503 발생으로 삽질을 좀 했는데..

결국 원인은 my.ini 에 오타때문이었다... 

 


한참 찾았다. 흠.

SELECT time_to_sec( timediff( now(), stime ) );  
/* stime 부터 지금 까지 초과한 시간을 초로 환산한 결과임.  정수로 출력. */


instr 은 있는데 ..  뒤에서 부터 찾는 instrb 가 없어서 만들어봤다.

DELIMITER $$

DROP FUNCTION IF EXISTS `dbname`.`uft_InStrB` $$
CREATE DEFINER=`username`@`%` FUNCTION `uft_InStrB`(v_str varchar(1000), v_index varchar(100)) RETURNS int
BEGIN
  BEGIN
    DECLARE x_index int;

     SET v_str = REVERSE(v_str);

     SELECT instr(v_str, v_index) into x_index;

     SET x_index = (Length(v_str) - x_index) + 1;

    RETURN x_index;
  END;
END $$

DELIMITER ;

예>
SELECT uft_instrb ('123_123_23', '_');    //결과 :  8

1. 백업

C:\>mysqldump -uroot -p[비밀번호] [백업할DB명] > [백업파일명].sql

이렇게 하면 [백업파일명].sql 파일이 생성된다.
이 파일에는 테이블 생성 및 데이터 insert 등의 sql 문장이 가득 들어있다.

2. 복구

C:\>mysql -uroot -p[비밀번호] [복구할DB명] < [복구할파일명].sql

이렇게 하면 복구 된다.  참 ~ 쉽다.

전체를 백업할 때는 mysql 데이터베이스도 함께 백업 받아두어야 한다.


실제 예>
1. 백업

C:\> mysqldump -uroot -p1111 test > test_backup.sql

test 데이터베이스가 test_backup.sql 파일로 백업된다.

2. 복구

C:\> mysql -uroot -p1111 test < test_backup.sql

test 데이터베이스에 백업한 내용이 복구 된다.


- 헉~ 데이블과 데이터만 백업되네요.. 프로시저, 함수 등은 백업이 안되네요.. 다른 방법이 있을텐데.. 찾으면 다시 올릴게요

Rand() 함수가 존재하며 그 결과값은 0부터 1 사이의 값을 리턴한다. (예: 0.43325987654098)

따라서 0 부터 9 사이의 난수를 발생하려면...

SELECT  Floor( Rand() * 10 );

참고로 Floor( 값 ) 는 값보다 작은 정수 중 가장 큰 수를 반환한다.

저장 프로시저 내에서 Cursor를 사용해야할 때가 가끔 있다...

예>

BEGIN
DECLARE x_done int DEFAULT 0;
DECLARE x_num  int;
DECLARE x_name   varchar(20);
DECLARE cur_TestCursor CURSOR FOR
       SELECT  num, name   FROM MemberInfo;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET x_done = 1;   /* 데이터가 없으면 x_done=1 */
OPEN cur_TestCursor;

   REPEAT
      FETCH NEXT FROM cur_TestCursor INTO x_num, x_name;      /* 변수에 값을 담는다 */

        IF NOT x_done THEN

/* 여기서 수행할 쿼리를 해준다 */

        END IF;

   UNTIL x_done END REPEAT;         /* x_done이 1이 될때까지 반복된다 */
 CLOSE  cur_TestCursor;
END;


날짜 형식..  "yyyy-mm-dd hh:mi:ss"

MSSQL 에서  

Convert(char(19), GETDATE(), 120)
MYSQL 에서는
CAST( DATE_FORMAT( NOW(),'%Y-%m-%d %H:%i:%s' ) AS CHAR(19) )


날짜 형식..  "yyyymmdd"

MSSQL 에서
Convert(char(8), GETDATE(), 112)


MYSQL 에서는
CAST( DATE_FORMAT( NOW(),'%Y%m%d' ) AS CHAR(8) )


 

CONST CONNECT_MYSQL_STRING = "Driver={MySQL ODBC 3.51 driver}; Server=127.0.0.1; Database=test;Uid=testuser;Pwd=1234;"

Set connDB = Server.CreateObject("ADODB.Connection")

connDB.Open CONNECT_MYSQL_STRING
connDB.Execute("set names euckr")     <- 요고 해주면 된다.

.
.
.


MSSQL 에서는 IDENTITY (1,1) 이런식으로 하면 1부터 1씩자동증가한다.

MySQL은 테이블 생성시 auto_increment 을 붙여주면 된다. 단, 반드시 primary key 여야 한다.

예 )
seqno int  not null auto_increment primary key,
또는

seqno int  not null auto_increment,
.
.
primary key(seqno),

만약 임의의 수부터 시작하고 싶다면,

seqno int  not null auto_increment = 임의의수 primary key,

테이블 생성된 후라면,

alter table 테이블명 auto_increment = 임의의수;






1. show databases; 는 데이터베이스들을 보여준다.
     create database 데이터베이스명 ; 은 데이터베이스를 생성한다.
     그러나 실제 mysql 관리자(서버관리자)가 아닌 이상 이 명령어를 사용할 수가 없다.
     호스팅업체에서 대개는 자신의 계정아이디와 동일한 DB하나만 서비스해주기 때문에
     직접 이 명령어를 사용하진 못한다.

사용자 삽입 이미지

2. use 데이터베이스 : 사용할 데이터 베이스를 선택한다. 실제 호스팅인 경우 바로
    바로 데이터베이스 안으로 접속되는 경우가 많다.
    show tables ;  테이블의 목록 출력
     - DB는 테이블 형태로 데이터가 저장된다.

사용자 삽입 이미지

테이블 생성
   create table 테이블 명 ( 컬럼명 데이터형식 널값여부 기타옵션);
  auto_increment 는 자동으로 번호를 증가시켜준다.
  primary key 는 고유값 설정으로 똑같은 값은 절대 받지 않는다는 뜻.

  *** mysql 각종 데이터형들
 tinyint 부호 있는 정수 -128 ~ 127
부호 없는 정수 0 ~255
1 Byte

SMALLINT 부호 있는 정수 -32768 ~ 32767
부호 없는 정수 0 ~65535
2 Byte

MEDIUMINT 부호 있는 정수 -8388608 ~ 8388607
부호 없는 정수 0 ~16777215
3 Byte

INT 또는 INTEGER 부호 있는 정수 -2147483648 ~ 2147483647
부호 없는 정수 0 ~4294967295
4 Byte

BIGINT 부호 있는 정수 -9223372036854775808 ~ 9223372036854775807
부호 없는 정수 0 ~18446744073709551615
8 Byte

FLOAT 단일 정밀도를 가진 부동 소수점
-3.402823466E+38 ~3.402823466E+38

DOUBLE 2 배 정밀도를 가진 부동 소수점
-1.79769313486231517E+308 ~ 1.79769313486231517E+308

DATE 날짜를 표현하는 유형
1000-01-01 ~ 9999-12-31

DATETIME 날짜와 시간을 표현하는 유형
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

TIMESTAMP 1970-01-01 00:00:00 부터 2037년 까지 표현
4 Byte

TIME 시간을 표현하는 유형
-839:59:59 ~ 838:59:59

YEAR 년도를 표현하는 유형
1901 년 ~ 2155년

CHAR(M) 고정길이 문자열을 표현하는 유형
M = 1 ~255

VARCHAR(M) 가변길이 문자열을 표현하는 유형
M = 1 ~ 255

TINYBLOB
TINYTEXT 255개의 문자를 저장
BLOB : BINARY LARGE OBJECT의 약자

BLOB
TEXT 63535개의 문자를 저장

MEDIUMBLOB
MEDIUMTEXT 16777215개의 문자를 저장

LONGBLOB
LONGTEXT 4294967295(4Giga)개의 문자를 저장


 3. desc 테이블 명 ; 테이블의 각 컬럼 형식 보기

사용자 삽입 이미지



4. 데이터 입력하기
사용자 삽입 이미지

5.한꺼번에 데이터 입력하기

사용자 삽입 이미지


6. no 필드에 값을 입력하지 않아도 자동적으로 증가하는 것을 볼 수 있다.

사용자 삽입 이미지

7. 원하는 필드만 선택할때...

사용자 삽입 이미지

8. 조건으로 검색하기

사용자 삽입 이미지


9. 내림차순 정렬하기

사용자 삽입 이미지

10.오름차순정렬

사용자 삽입 이미지

11. 조건절과 정렬 함께 사용하기

사용자 삽입 이미지

12.데이터 수정하기(조건절이 없으면 전부 바뀐다.)

사용자 삽입 이미지

13. 데이터 삭제(조건이 없으면 전부 삭제된다)

사용자 삽입 이미지

14. 컬럼(필드) 추가해보기

사용자 삽입 이미지

15. 컬럼 삭제해보기

사용자 삽입 이미지

16. 컬럼 수정해보기

사용자 삽입 이미지


17. 테이블 삭제해보기

사용자 삽입 이미지

18. 합계 연습을 위해 임시 테이블 만들었음

사용자 삽입 이미지

19. 필드의 최대, 최소, 평균, 합계구해보기
    as 임시필드명 해주면 임시로 필드명이 생성된다.

사용자 삽입 이미지

20. 필드의 총 개수 구해보기

사용자 삽입 이미지

21. 한꺼번에 최대값과 합산값, 평균구하기.
     between 으로 범위값 내에 있는 필드 구하기
    in 으로 지정한 필드만 뽑아내기

사용자 삽입 이미지

22. not in 은 그것을 제외한 필드를 구한다.
     %는 like 와 함께 쓰이며 '%강%'은 강을 기준으로 강을 포함한 앞뒤문자검색을 해준다.

사용자 삽입 이미지

23. a 이후에 문자열 검색
     b 이전에 문자열 검색

사용자 삽입 이미지

24. limit는 레코드 처음부터 2개만 뽑아온다. 범위와 함께 쓰일 수도 있다.

사용자 삽입 이미지

25. limit 시작레코드번호, 뽑아올 레코드 갯수

사용자 삽입 이미지

26. 컬럼명 바꾸기(컬럼명을 바꿀땐 데이터도 같이 바꿔줘야 한다.)
     테이블 명 바꾸기....(아래참고)


사용자 삽입 이미지

27. 날짜형 데이터넣기
     now() 함수는 날짜를 가지고 있는 내장합수인데 선언한 데이터형에 따라 들어가는 값이
     아래처럼 다르게 들어간다.

사용자 삽입 이미지


출처 : http://harogipro.tistory.com/57

+ Recent posts