Những vấn đề chung:
- GROUP BY hành vi. PostgreSQL có GROUP BY khá nghiêm ngặt. Nếu bạn sử dụng mệnh đề GROUP BY, thì mỗi cột trong SELECT của bạn phải xuất hiện trong GROUP BY hoặc được sử dụng trong hàm tổng hợp.
- Cắt ngắn dữ liệu. MySQL sẽ lặng lẽ cắt ngắn chuỗi dài để vừa với một cột
char(n)
trừ khi máy chủ của bạn ở chế độ nghiêm ngặt, PostgreSQL sẽ khiếu nại và làm cho bạn cắt xén chuỗi của mình.
- Trích dẫn là khác nhau, MySQL sử dụng backticks để trích dẫn số nhận dạng trong khi PostgreSQL sử dụng dấu ngoặc kép.
- LIKE là trường hợp không nhạy cảm trong MySQL nhưng không phải trong PostgreSQL. Điều này dẫn nhiều người dùng MySQL sử dụng LIKE như một toán tử bình đẳng không phân biệt chữ hoa chữ thường.
(1) sẽ là vấn đề nếu bạn sử dụng phương thức AR2 group
trong bất kỳ truy vấn nào hoặc GROUP BY trong bất kỳ SQL thô nào. Thực hiện một số tìm kiếm column "X" must appear in the GROUP BY clause or be used in an aggregate function
và bạn sẽ thấy một số ví dụ và giải pháp phổ biến.
(2) sẽ là vấn đề nếu bạn sử dụng cột chuỗi ở bất kỳ đâu trong ứng dụng của mình và mô hình của bạn không xác thực hợp lệ độ dài tất cả giá trị chuỗi đến. Lưu ý rằng việc tạo một cột chuỗi trong Rails mà không chỉ định một giới hạn thực sự tạo ra một cột varchar(255)
do đó thực sự là một ẩn :limit => 255
mặc dù bạn không chỉ định một. Cách khác là sử dụng t.text
cho các chuỗi của bạn thay vì t.string
; điều này sẽ cho phép bạn làm việc với các chuỗi lớn tùy ý mà không bị phạt (đối với PostgreSQL ít nhất). Như Erwin lưu ý dưới đây (và mọi cơ hội khác anh ta nhận được), varchar(n)
là một chút của một lỗi thời trong thế giới PostgreSQL.
(3) không phải là vấn đề trừ khi bạn có SQL thô trong mã của mình.
(4) sẽ là vấn đề nếu bạn đang sử dụng LIKE ở bất kỳ đâu trong ứng dụng của mình.Bạn có thể sửa lỗi này bằng cách thay đổi a like b
thành lower(a) like lower(b)
(hoặc upper(a) like upper(b)
nếu bạn muốn hét) hoặc a ilike b
nhưng lưu ý rằng PostgreSQL's ILIKE là không chuẩn.
Có những khác biệt khác có thể gây ra sự cố nhưng những vấn đề này có vẻ như là vấn đề phổ biến nhất.
Bạn sẽ phải xem xét một vài điều để cảm thấy an toàn:
group
cuộc gọi.
- SQL thô (bao gồm bất kỳ đoạn mã nào trong các cuộc gọi
where
).
- Xác thực độ dài chuỗi trong các mô hình của bạn.
- Tất cả các công dụng của LIKE.
Nguồn
2012-01-05 01:09:52
Tôi có thể phải tiếp tục và thử điều này, cảm ơn thông tin! –
Cần lưu ý rằng addon MySQL có những hạn chế làm cho nó không thực tế cho các ứng dụng nghiêm trọng. – Dan