## 다른분들의 편의를 위해 허접한 실력이지만 번역해 봅니다..
## 이글을 작성당시 4.0 최신버전은 4.0.23 입니다.
## 이글은 mysql document 중 Upgrading from Version 3.23
to 4.0 을 번역한 겁니다.
- ISAM 테이블은 더이상 지원되지 않을것이며 4.1 버전에선 디폴트로
포함되지 않을 것이다.
- 4.0 에서 3.23 으로 다운그레이드 할때 full text index 를 사용하고
있다면 반드시 dump & restore 를 해야 한다. 4.0 버전은 3.23 과
다른 full text index 포멧을 사용한다.
[Server Changes]
1. 권한테이블의 변경(user 테이블에 몇가지 컬럼
추가)
2. --safe-show-database 옵션이 없어졌다.
3. safe_mysqld 가 mysqld_safe 로 변경되었다.
하위호환을 위해 safe_mysqld 는 mysqld_safe 의 심볼릭링크로 여전히
존재한다.
4. InnoDB 가 디폴트로 지원된다. InnoDB 사용을
원하지 않으면 서버시작시 --skip-innodb 옵션을 사용하라. 컴파일시
InnoDB 지원을 원하지 않으면 --without-innodb 옵션을 사용하여
컴파일하라.
5. myisam_max_extra_sort_file_size 와
myisam_max_extra_sort_file_size 의 설정값이 byte 단위로 입력된다.
(4.0.3 이전까진 MB 단위로 입력되었다.)
6. --temp-pool 옵션이 디폴트로 적용된다. 이
옵션은 리눅스에서 성능향상이 있다.
7. --skip-locking 와 --enable-locking 옵션이
--skip-external-locking 와 --external-locking 로 변경되었다.
8. MyISAM/ISAM 에 대한 외부잠금이 디폴트로
비활성화 되었다. --external-locking 옵션으로 활성화할 수 있다.
9. 다음과 같은 시작변수와 옵션명이
변경되었다.
10. record_buffer, sort_buffer 및 warnings
시작옵션이 여전히 존재하지만 추후 삭제될 예정이다.
[SQL Changes]
1. 다음의 SQL 변수들의 이름이
변경되었다.
Old Name |
New Name |
SQL_BIG_TABLES |
BIG_TABLES |
SQL_LOW_PRIORITY_UPDATES |
LOW_PRIORITY_UPDATES |
SQL_MAX_JOIN_SIZE |
MAX_JOIN_SIZE |
SQL_QUERY_CACHE_TYPE |
QUERY_CACHE_TYPE |
예전이름도 4.0 버전에선 여전히 사용가능하지만 추후 삭제될
예정이다.
2. SET SQL_SLAVE_SKIP_COUNTER=skip_count
대신에
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=skip_count 를 사용해야 한다.
(변수들이 GLOBAL 과 SESSION 으로 구분되었다.)
3. 바이너리 로그를 기록하지 않는다면 SHOW
MASTER STATUS 는 널값을 리턴할 것이다.
4. slave 가 시작되지 않았다면 SHOW SLAVE STATUS
는 널값을 리턴할 것이다.
5. SHOW INDEX 에 두가지 정보가 추가되었다.
(Null 과 Index_type)
6. SHOW OPEN TABLES 의 양식이 변경되었다.
7. ORDER BY col_name DESC 는 NULL 값을 마지막에
정렬한다. 3.23 과 4.0 초기버전에서는 이에 대한 규칙이 없었다.
8. CHECK, LOCALTIME, 와 LOCALTIMESTAMP 들이
예약어로 추가되었다.
9. DOUBLE 과 FLOAT 컬럼이 UNSIGNED 표기를
가진다. (이전에는 UNSIGNED 는 무시되었다.)
10. 모든 비트연산(|, &, <<, >>,
and ~)의 결과는 unsigned 이다. 이것은 signed 결과가 필요한 곳에서
문제가 될 수 있다.
[주의]정수연산에서 어느한쪽이 unsigned 타입이면
결과는 unsigned 이다. 4.0 으로 이전하기 전에 정수연산에서 발생할 수
있는 문제를 체크하라. 이 기능은 서버시작시
--sql-mode=NO_UNSIGNED_SUBTRACTION 옵션을 사용하여 활성화하지 않을
수 있다.
11. BIGINT 컬럼에 integer 값으로 입력할 수
있다. (3.23 에서는 string 으로 입력해야 했으며 여전히
동작한다.)
12. 3.23 에서 INSERT INTO ... SELECT 는 무조건
IGNORE 로 동작하였다. 4.0 에서는 IGNORE를 명시하지 않을때 에러가
발생하면 중단하거나 롤백할 것이다.
13. 테이블의 모든 열을 지우고 리턴값을 받을
필요가 없을때 TRUNCATE TABLE 을 사용하라.(delete 보다
빠르다.)
(4.0 에서 DELETE FROM tbl_name 는 삭제된 열수를 리턴하며
AUTO_INCREMENT 카운터를 리셋하지 않는다. )
14. TRUNCATE TABLE 이나 DROP DATABASE 을 실행시
실행중인 트랜잭션이나 LOCK TABLES 가 있을때는 에러가 발생할
것이다.
15. MATCH ... AGAINST (... IN BOOLEAN MODE) 로
full-text 검색을 사용하기 위해서는 REPAIR TABLE tbl_name USE_FRM
명령으로 인덱스를 재구성해야 한다.
인덱스를 재구성하지 않고 boolean mode full-text 검색을 사용하면
정확하지 않은 결과가 리턴될 것이다.
16. LOCATE() 와 INSTR() 는 binary string 이
인자로 사용될때 대소문자를 구분할 것이다. 그렇지 않은 경우에는
대소문자 구분을 하지 않는다.
17. STRCMP() 실행시 현재 글자셋을 비교 기준으로
사용한다. binary string 을 인자로 사용하지 않는다면 대소문자 구분을
하지 않을것이다.
18. HEX(str) 은 문자를 hex 값으로 리턴한다.
숫자값을 hex 값으로 바꾸고 싶다면 숫자타입의 인자를 사용하라.
19. RAND(seed) 는 3.23 과는 다른 난수열을
리턴한다. 이것은 RAND(seed) 와 RAND(seed+1) 의 차이를 더 명확히
하기 위해 도입되었다.
20. IFNULL(A,B) 의 리턴값은 A 와 B 중 더 범용적인
타입으로 리턴될 것이다.
(타입의 범용 순서는 string, REAL, INTEGER 순이다.)
[C API Changes]
1. MySQL 컴파일시 CFLAGS=-DUSE_OLD_FUNCTIONS 를
명시하지 않으면 mysql_drop_db(), mysql_create_db(), mysql_connect()
를 사용할 수 없다.
4.0 의 새로운 API 들을 사용하도록 클라이언트 프로그램을 변경하는
것이 더 좋다.
2. MYSQL_FIELD 구조체의 length 와 max_length 가
unsigned int 에서 unsigned long 으로 변경되었다. 문제가 발생하진
않겠지만 printf() 류의 함수에서 인자로 사용시 warning message 를
발생할 것이다.
3. 멀티쓰레드 클라이언트는 mysql_thread_init()
와 mysql_thread_end() 을 사용하라.
[Other Changes]
Perl DBD::mysql module 을 다시 컴파일하기 위해서는 최신버전을
사용하라. 2.9003 버전을 추천한다. 1.2218 이전버전은 이미 삭제된
mysql_drop_db() 호출을 사용하기 때문에 사용할 수 없다.
|