Điểm:0

Hỗ trợ kế thừa Mariadb

lá cờ cn

Tôi có phiên bản cũ của trang web php, sử dụng số cột 'row_number' không thoát trong các truy vấn sql của nó. Có vẻ như trong phiên bản mới của mariadb đã có chức năng mới gọi là "row_number()" được thêm vào và do đó các truy vấn không thành công. Để cấu trúc lại toàn bộ dự án là không cần thiết. Ngoài ra, tôi không muốn cập nhật toàn bộ nội dung với phiên bản cũ hơn của mariadb. Có cách nào để sử dụng mariadb mới mà còn sử dụng bộ cú pháp/hàm cũ hơn để không xảy ra xung đột không?

Cảm ơn.

lá cờ ua
Tôi nghĩ bạn cần phải cắn và chỉnh sửa tất cả các tệp. Nếu bạn đang dùng Linux, bạn có thể viết một tập lệnh `sed` (tôi nghĩ là một dòng) để thực hiện tất cả việc chỉnh sửa trong một lệnh. (Tôi không biết về một công cụ tương đương trên Windows.)
Điểm:1
lá cờ cn

Một cách để giải quyết các loại vấn đề này là sử dụng bộ lọc biểu thức chính quy trong MariaDB MaxScale. Nếu bạn biết ứng dụng sử dụng SỐ LƯỢNG HÀNG theo một số cách cụ thể, bạn có thể xác định một biểu thức chính quy phù hợp với nó và thay thế nó bằng phiên bản được trích dẫn.

Nhược điểm rõ ràng của phương pháp này là các biểu thức chính quy hơi khó hiểu và chúng không dễ bảo trì nếu mẫu được so khớp trở nên phức tạp. Tuy nhiên, điều này có thể cho phép ứng dụng của bạn hoạt động trong khi bạn cập nhật ứng dụng của mình lên phiên bản mới hơn.

Đây là một ví dụ về cách cấu hình bộ lọc:

[Bộ lọc Regex]
loại = bộ lọc
mô-đun=regexfilter
khớp=/ROW_NUMBER/
thay thế=/`ROW_NUMBER`/
Điểm:1
lá cờ ua

Trong Linux (hoặc tương tự), một lệnh duy nhất có thể thêm backtic trên tất cả các tệp của bạn.

Thận trọng: Không sử dụng cái này mà không kiểm tra kỹ lưỡng trước:

sed -i 's/row_number/\`row_number\`/ig *

Ghi chú:

-i -- cập nhật tập tin tại chỗ
\ -- cần tránh backtics bị shell tác động
tôi - bỏ qua trường hợp
g -- xử lý nhiều lần xuất hiện trong một dòng
* -- thay đổi để chỉ định các tệp có thể cần chỉnh sửa
lá cờ cn
thêm dấu ngoặc kép nguy hiểm hơn là đổi tên cột và biến, mặc dù nó cũng khá công việc. Ngoài ra, sed chắc chắn không phải là lý tưởng cho nhiệm vụ, tôi khuyên dùng vscode và chức năng thay thế của nó - nếu có ai quan tâm đến cách tiếp cận như vậy. Tuy nhiên, tôi không nghĩ mình muốn đi theo con đường đó - ít nhất là vào lúc này. Nếu không có lớp tương thích cho mariadb, thì tôi có thể xem xét nó.
Điểm:0
lá cờ cn

Ngoài ra, tôi không muốn cập bến toàn bộ mọi thứ với phiên bản cũ hơn mariadb.

Tốt. Sử dụng các phiên bản cũ vô thời hạn là công việc nhiều hơn hầu hết mọi người nhận ra. Cập nhật bảo mật sẽ kết thúc, bạn sẽ cần tìm một giải pháp thay thế như hỗ trợ mua từ người có thể nhập các bản sửa lỗi.Đó là một kỹ năng khó tìm. Và sau đó bạn bị kẹt ở phiên bản cũ và không nhận được các tính năng mới.

Có cách nào để sử dụng mariadb mới mà còn sử dụng cú pháp/hàm cũ hơn không thiết lập để không có va chạm?

Không, row_number là một chức năng cửa sổ mà tồn tại trong tất cả các phiên bản được hỗ trợ của MariaDB. Rất tiếc là bạn đã chọn tên này trước, nhưng row_number là quy ước giữa các triển khai SQL.

Trích dẫn là một cú pháp để giải quyết sự mơ hồ, như bạn đã nói. Đây sẽ là một dự án tái cấu trúc tương đối nhỏ, không thay đổi hành vi và không cần chạm vào dữ liệu hoặc lược đồ. Nếu các nhà phát triển trang web của bạn không làm điều đó, thì còn gì bảo trì phức tạp hơn mà mã không nhận được?

lá cờ ua
Và nếu đó không phải là "row_nnumber", thì đó có thể là một thứ khác. Và phiên bản tiếp theo sẽ lấy một số tên khác mà bạn có thể đang sử dụng.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.