Danh sách những việc tôi sẽ làm khác đi:
MEDIUMINT trong MySQL là một con vịt kỳ quặc (3 byte). Tôi sẽ tránh nó, nhưng nếu không thì cũng ánh xạ nó với INTEGER.
MySQL BOOLEAN (bí danh BOOL, bí danh TINYINT (1)) không tương thích với kiểu boolean pg. Bạn có thể chuyển hoặc không thể chuyển ứng dụng tùy thuộc vào những gì chúng sử dụng dưới dạng ký tự boolean. Trong MySQL, TRUE và FALSE ánh xạ tới các giá trị số nguyên 1 và 0. Có vẻ như kiểu pg BOOLEAN sử dụng ký hiệu chữ chuỗi. Vì vậy, các ứng dụng có thể có hoặc có thể không di động - ít nhất thì nó không thể thay thế được.
Cuối cùng, đối với dòng cuối cùng trong tabl của bạn, tôi nghĩ cụm từ SQLite nên đọc:
INTEGER PRIMARY KEY AUTOINCREMENT
Điều này gần tương đương với
BIGINT PRIMARY KEY AUTO_INCREMENT
trong MySQL. Trong postgres, kiểu dữ liệu SERIAL dẫn đến cột INTEGER và cột này sẽ giống với cột của MySQL
INTEGER PRIMARY KEY AUTO_INCREMENT
Postgres cũng có kiểu BIGSERIAL, giống như SERIAL nhưng có kiểu BIGINT thay vì kiểu INT.
Những gì tôi đã bỏ lỡ:
Tôi thiếu INTEGER (bí danh INT) cho MySQL. Nó có thể so sánh với INTEGER trong pg. Các thiếu sót rất quan trọng:VARCHAR và CHAR. Về mặt ngữ nghĩa, VARCHAR trong MySQL và PG, và CHAR trong MySQL và PG đều giống nhau, nhưng trong MySQL, các kiểu này có độ dài tối đa ngắn hơn nhiều. Trong MySQL, các loại này có thể có tối đa nhỏ hơn 64kb một chút, tính bằng pg 1Gb (byte). Bộ chỉ định độ dài thực tế được biểu thị bằng số ký tự, vì vậy nếu bạn có bộ ký tự nhiều byte, bạn phải chia độ dài tối đa cho số ký tự tối đa để có được độ dài tối đa theo lý thuyết được chỉ định cho bộ ký tự đó. Trong SQLite, VARCHAR và CHAR ánh xạ cả hai thành TEXT
Các kiểu dữ liệu BIT trong MySQL và PG có ngữ nghĩa gần giống nhau, nhưng trong MySQL, độ dài tối đa của kiểu dữ liệu BIT là 64 (bit)
Tôi nghĩ rằng kiểu dữ liệu VARBINARY của MySQL có thể so sánh tốt nhất với kiểu dữ liệu BYTEA của PG. (nhưng thực sự các kiểu BLOB của MySQL cũng ánh xạ đến điều đó)
Kiểu FLOAT trong MySQL phải tương đương với REAL trong postgres (và REAL trong SQLite cũng vậy) Kiểu DECIMAL trong MySQL tương đương với DECIMAL trong postgres, ngoại trừ rằng trong postgres, kiểu này không áp đặt giới hạn thừa về độ chính xác, trong khi MySQL có độ chính xác tối đa là (tôi tin là) 70. (nghĩa là 70 vị trí số) Đối với cả MySQL và Postgres, NUMERIC là bí danh cho kiểu DECIMAL.