2011-03-02 2 views
0

은 내가 MySQL의에서 다음 표를 선언 한 :PostgreSQL - MySQL에서 선언 된 테이블의 동일한 버전?

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `session_id` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '0', 
    `ip_address` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '0', 
    `user_agent` varchar(150) COLLATE utf8_bin NOT NULL, 
    `last_activity` int(10) unsigned NOT NULL DEFAULT '0', 
    `user_data` text COLLATE utf8_bin NOT NULL, 
    PRIMARY KEY (`session_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

은 무엇 포스트 그레스의 테이블의 동등한 정의 될 것이다, 내 데이터베이스가 이미 UTF-8 인코딩을 사용하는 가정?

답변

3
CREATE TABLE ci_sessions (
    session_id varchar(40) NOT NULL DEFAULT '0', 
    ip_address varchar(16) NOT NULL DEFAULT '0', 
    user_agent varchar(150) NOT NULL, 
    last_activity int4 NOT NULL DEFAULT '0', 
    user_data text NOT NULL, 
    PRIMARY KEY (session_id) 
); 

수정 자 IF NOT EXISTS는 최신 PostgreSQL 버전 중 하나에 IMHO가 추가되었습니다.

EDIT : 익명의 말을 권장하므로 4 번째 속성을 10 진수 (int4)로 변경했습니다. 하지만 타임 스탬프 (0)를 선호합니다. 여기에 마이크로 초 정밀도가 필요한 경우 (0)없이 타임 스탬프 만 사용하십시오.
http://www.postgresql.org/docs/current/static/datatype-net-types.html

열 이름 last_activity :

것은 당신이 그에 대한 기본 INET의 데이터 유형을 사용하는 것이 더 좋을 수도 IP 주소를 조회해야하는 경우 : 다니엘은 말했다 이미 무슨 이외에

+1

흠 ... 그래서'utf8_bin'과'COLLATE'는 단지 관계없는 것입니까? –

+0

전체 클러스터에 대해 정의됩니다. 적어도 8.4에서 개별 열에 대한 특별한 데이터 정렬을 지정할 수 없습니다! 새로운 버전의 문서를 보도록하겠습니다. 데이터 정렬에 대한 자세한 내용은 다음 링크를 참조하십시오. http://www.postgresql.org/docs/8.4/interactive/locale.html – Daniel

+0

죄송합니다. 데이터 정렬은 여전히 ​​DB 용으로 설정할 수있는 것 같습니다. 그러나 인덱스에 특별한 데이터 정렬 설정을 사용할 수 있으며 올바른 정렬 절을 지정할 때 사용됩니다. – Daniel

1

타임 스탬프 열 또는 비슷한 것을 제안합니다. 이를 위해 timestamp 데이터 형식을 사용하는 것이 좋습니다.

다른 점이라면 integer은 십진수보다 MySQL의 int(10)에 더 적합합니다.

MySQL의 int (10)은 이 아니고은 값 범위를 정의한다는 점에 유의하십시오. 이는 단지 목적을 표시하기위한 힌트 일뿐입니다!

+0

+ int (10)에 힌트를 추가해 주셔서 감사합니다. MySQL이 이와 같이 작동하는 것을 몰랐습니다. – Daniel

+0

@Daniel : 10 진수 대신 int를 사용하도록 코드 예제를 변경하는 것이 좋습니다. –

+0

완료 .1234567890 – Daniel

관련 문제