Điểm:3

#1267 - Kết hợp đối chiếu bất hợp pháp (utf8mb4_0900_ai_ci,COERCIBLE) và (latin1_swedish_ci,IMPLICIT) cho hoạt động 'UNION'

lá cờ gb

Tôi đã nâng cấp MySQL từ phiên bản 5.7 lên 8. Tôi đã xuất cơ sở dữ liệu từ MySQL 5.7 cũ & Bây giờ tôi đang cố gắng nhập cơ sở dữ liệu vào MySQL 8.Nhưng tôi gặp lỗi đối với một trong các chế độ xem cơ sở dữ liệu có mệnh đề hợp nhất..

lỗi là -

#1267 - Kết hợp đối chiếu bất hợp pháp (utf8mb4_0900_ai_ci,COERCIBLE) và (latin1_swedish_ci,IMPLICIT) cho hoạt động 'UNION'

quan điểm là -

TẠO CHẾ ĐỘ XEM VIEW_ALL_ORDER_ITEMS_REF AS
  chọn * từ VIEW_ORDER_ITEM_EQ_REF
  liên hiệp 
  chọn * từ VIEW_ORDER_ITEM_SO_REF
  liên hiệp 
  chọn * từ VIEW_ORDER_ITEM_OA_REF
  liên hiệp 
  chọn * từ VIEW_ORDER_ITEM_WO_REF
  liên hiệp 
  chọn * từ VIEW_ORDER_ITEM_DO_REF

Tôi gặp phải lỗi này khi tôi đang cố gắng áp dụng liên kết giữa nhiều hơn hai chế độ xem.

quan điểm này hoạt động tốt.

thả xem nếu tồn tại VIEW_ALL_ORDER_ITEMS_REF;
TẠO CHẾ ĐỘ XEM VIEW_ALL_ORDER_ITEMS_REF AS
  chọn * từ VIEW_ORDER_ITEM_EQ_REF
  liên hiệp 
  chọn * từ VIEW_ORDER_ITEM_SO_REF

có ai giúp được không ?

lá cờ in
Bạn đang nhập dữ liệu như thế nào? Khôi phục từ kết xuất SQL?
rahul shalgar avatar
lá cờ gb
Vâng............
Điểm:1
lá cờ in

Khi bạn đang khôi phục cơ sở dữ liệu từ kết xuất MySQL, bạn có thể giải quyết vấn đề của mình đồng thời kiểm chứng cơ sở dữ liệu trong tương lai bằng cách thay đổi bộ ký tự và đối chiếu cho các bảng, hàm và thủ tục của bạn. Có một số thay đổi giữa MySQL 5.7 và 8.x, vì vậy đây thực sự là thời điểm tốt nhất để làm điều đó.

Đây là những gì bạn có thể làm với mỗi TẠO RA bản tường trình:

  1. Thay thế cái BỘ KÝ TỰ MẶC ĐỊNH đến utf8mb4

  2. Thay thế cái THU THẬP đến utf8mb4_unicode_ci

  3. (Đối với bảng) Đảm bảo ĐỘNG CƠ được đặt thành InnoDB

    Ghi chú: Bạn không muốn sử dụng MyISAM nữa, bạn cũng không muốn kết hợp ĐỘNG CƠ các loại có truy vấn, vì đó là một điểm nhấn hiệu suất khá quan trọng.

Thực hiện tất cả những điều này với trình soạn thảo văn bản ưa thích của bạn, sau đó chạy quy trình nhập vào cơ sở dữ liệu MySQL mới. Đảm bảo thiết lập cơ sở dữ liệu BỘ KÝ TỰ MẶC ĐỊNHTHU THẬP các giá trị giống như bạn có cho các bảng, hàm và thủ tục.

Lý do cho các đề xuất:

MySQL 8.0 là một bước khởi đầu đáng kể so với dòng 5.x với rất nhiều mục không được dùng nữa trước 5.2 đã bị xóa hoàn toàn. Điều này bao gồm các loại cột nhất định, cũng như các đối chiếu. Quá trình nhập sẽ cố gắng tự động điều chỉnh các phần tử không dùng nữa thành các phần tử tương đương hiện đại của chúng, nhưng thường tạo ra một mớ hỗn độn các bộ ký tự và đối chiếu.

Các utf8mb4_unicode_ci đã được chứng minh là đối chiếu đáng tin cậy nhất khi làm việc với các ký tự nhiều byte, chẳng hạn như biểu tượng cảm xúc và những ký tự được sử dụng trong các ngôn ngữ không phải tiếng Anh.Mặc dù nó sẽ sử dụng nhiều dung lượng đĩa hơn một chút, nhưng điều này sẽ đảm bảo (các) ứng dụng của bạn có thể xử lý bất kỳ ký tự nào ném vào nó. Các _ci bit ở cuối đảm bảo các giá trị được coi là phân biệt chữ hoa chữ thường khi tham gia và thực hiện tra cứu.

Thay thế tất cả các CHARSETTHU THẬP các giá trị sẽ đảm bảo bạn không nhận được Kết hợp đối chiếu bất hợp pháp lại lỗi ... trừ khi ...

Những điều cần xem xét với các thủ tục và trình kích hoạt được lưu trữ

MySQL 8.0 dường như mong đợi một chút cụ thể hơn khi tạo các bảng tạm thời trong các thủ tục được lưu trữ. Nếu bạn sử dụng bảng tạm thời, hãy đảm bảo xác định trước chúng trong mã giống như cách bạn làm với bảng thông thường. Cú pháp khá giống nhau, ngoại trừ việc bạn thêm một từ bổ sung:

THẢ BẢNG TẠM THỜI NẾU TỒN TẠI `YearlySums`;
TẠO BẢNG TẠM THỜI NẾU KHÔNG TỒN TẠI `YearlySums ` (
    ...
) ENGINE=InnoDB CHARSET MẶC ĐỊNH=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Điều này sẽ đảm bảo bạn không gặp phải Kết hợp đối chiếu bất hợp pháp lỗi khi làm việc với các thủ tục được lưu trữ.

Nếu bảng của bạn có TRƯỚC KHI CHÈN hoặc TRƯỚC CẬP NHẬT kích hoạt và các bảng đó được điền thông qua các thủ tục được lưu trữ, bạn sẽ muốn thực hiện một lượng lớn thử nghiệm trước khi đưa cơ sở dữ liệu vào cài đặt sản xuất. Oracle đã giới thiệu một lỗi khá nghiêm trọng trong 8.0.25 có thể khiến công cụ Máy chủ MySQL gặp sự cố trong một số trường hợp nhất định khi một TRƯỚC trình kích hoạt đang xử lý các hàng như một phần của xác thực dữ liệu, nhưng chỉ khi dữ liệu đó được cung cấp bởi một thủ tục được lưu trữ. Vấn đề đã tồn tại hơn một năm và Oracle dường như không quan tâm.

Đừng để lỗi này làm hỏng kỳ nghỉ năm mới của bạn như nó đã làm của tôi năm ngoái

rahul shalgar avatar
lá cờ gb
nó đã hoạt động .. cảm ơn bạn rất nhiều @matigo .. có tùy chọn nào để đặt bộ ký tự và đối chiếu trên toàn cầu không?
lá cờ in
Bạn có thể đặt đối chiếu mặc định trong `my.cnf`, nhưng điều này có thể gây ra sự cố nếu bạn đang sao chép trên nhiều máy chủ và một máy chủ không có giá trị đối chiếu trong tệp cấu hình. Đó là một trường hợp khó khăn, nhưng sẽ rất đau nếu va chạm. Cụ thể với các tuyên bố sẽ tiết kiệm rất nhiều đau đớn trong tương lai
rahul shalgar avatar
lá cờ gb
vâng cảm ơn bác...
rahul shalgar avatar
lá cờ gb
Tôi không có các thủ tục và trình kích hoạt được lưu trữ trong cơ sở dữ liệu của mình.. nó chỉ chứa các bảng.. thay vì khôi phục cơ sở dữ liệu từ kết xuất SQL, tôi có thể thay đổi tất cả các bảng của mình trên cơ sở dữ liệu hiện có để thay đổi bộ ký tự và đối chiếu không?
lá cờ in
Bạn có thể thay đổi, vâng. Lưu ý rằng văn bản có thể bị cắt xén sau đó vì các câu lệnh `ALTER TABLE` và `ALTER COLUMN` không hoàn hảo khi di chuyển dữ liệu giữa các đối chiếu. Nếu tất cả văn bản của bạn là tiêu chuẩn A-Z và 0-9, thì bạn sẽ ổn thôi. Neu ban co cac kieu toc phi la-tinh thi muon thi, thi va kich thi nhieu hon. Tôi làm việc với nhiều dữ liệu về châu Á, tiếng Do Thái và tiếng Ả Rập và đã gặp phải nhiều vấn đề trong nhiều năm khi cố gắng "tiết kiệm thời gian". Nhập lại sau khi sửa đổi tệp `.sql` luôn nhanh nhất đối với cơ sở dữ liệu lớn hơn 1GB

Đă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.