Điểm:2

Không thể xóa một cửa hàng tạm thời có chứa dấu gạch ngang hoặc dấu gạch ngang em

lá cờ ca

Tôi đang cố xóa bộ nhớ tạm thời dùng chung cho một khóa có chứa dấu gạch ngang hoặc dấu gạch ngang em.

$keyword = '2020â2021';
$tempstore = \Drupal::service('tempstore.shared')->get('my_module_name');
$tempstore->delete($keyword);

Nó ném ngoại lệ này.

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[HY000]: Lỗi chung: 1267 Kết hợp đối chiếu bất hợp pháp (ascii_General_ci,IMPLICIT) và (utf8mb4_General_ci,COERCIBLE) cho thao tác '=': XÓA TỪ {key_value_expire} WHERE ("tên" VÀO (:db_condition_placeholder_0)) VÀ ("bộ sưu tập" = :db_condition_placeholder_1); Mảng ( [:db_condition_placeholder_0] => 2020â2021 [:db_condition_placeholder_1] => tempstore.shared.my_module_name ) trong Drupal\Core\KeyValueStore\StorageBase->delete() (dòng 52 của core/lib/Drupal/Core/KeyValueStore /StorageBase.php).

Theo như tôi có thể nói, đó không phải là vấn đề với cơ sở dữ liệu, mà là do có dấu gạch ngang hoặc dấu gạch ngang trong khóa lưu trữ. Tôi đã cố gắng thoát khỏi nó với Html::thoát()utf8_encode(), nhưng nó không giải quyết được vấn đề.

CHỈNH SỬA: Tôi đã kiểm tra đối chiếu cơ sở dữ liệu cục bộ của mình là gì và nó trả về UTF8.

mysql> CHỌN DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME -> TỪ THÔNG TIN_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'drupal9'; +---------------------------------- +--------- ----+ | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +---------------------------------- +--------- ----+ | utf8 | utf8_General_ci | +---------------------------------- +--------- ----+

CHỈNH SỬA2:

Việc chạy các truy vấn sau đã khắc phục sự cố:

ALTER TABLE `key_value_expire` THAY ĐỔI `name` `name` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_General_ci NOT NULL DEFAULT '' COMMENT 'Khóa của cặp khóa/giá trị.';

ALTER TABLE `key_value_expire` CHANGE `collection` `collection` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_General_ci NOT NULL DEFAULT '' COMMENT 'Một tập hợp các cặp khóa và giá trị được đặt tên.';
Điểm:2
lá cờ us

Điều đó xảy ra vì bộ ký tự mà cơ sở dữ liệu đang sử dụng không utf8mb4 hoặc đối chiếu không utf8mb4_unicode_ci (hoặc utf8mb4_General_ci). Ngoài ra, hãy kiểm tra xem các bảng cơ sở dữ liệu đơn lẻ và các trường chứa đối chiếu nào được sử dụng và thay đổi nó khi cần thiết.

Cài đặt Drupal / Bước 3: Tạo cơ sở dữ liệu gợi ý những giá trị đó cho cơ sở dữ liệu được sử dụng từ Drupal.

Lưu ý: Cơ sở dữ liệu phải được tạo bằng mã hóa UTF-8 (Unicode) (utf8mb4) và một trong hai utf8mb4_unicode_ci hoặc là utf8mb4_General_ci đối chiếu. Sự khác biệt giữa hai đối chiếu liên quan đến tốc độ so sánh và sắp xếp ký tự của chúng. utf8mb4_General_ci nhanh hơn một chút và utf8mb4_unicode_ci chính xác hơn cho phạm vi ký tự rộng hơn. Nếu bạn không chắc chắn sử dụng utf8mb4_unicode_ci.

Nếu bạn đang sử dụng các ký tự UTF-8 cho các giá trị được lưu trong cơ sở dữ liệu, bạn sẽ gặp sự cố nếu cơ sở dữ liệu được đặt để sử dụng ASCII làm mã ký tự cho các bảng của nó.

user105050 avatar
lá cờ ca
Tôi đã kiểm tra và có vẻ như cơ sở dữ liệu của tôi đang sử dụng utf8_General_ci. Đã thêm chi tiết vào bài đăng gốc.
user105050 avatar
lá cờ ca
Tôi đã kiểm tra bảng bị ảnh hưởng và bạn đã đúng.Bản thân cơ sở dữ liệu đang sử dụng UTF-8 nhưng bảng 'key_value_expire' đang sử dụng ASCII cho cả cột 'tên' và 'bộ sưu tập'. Không chắc làm thế nào điều đó xảy ra.
apaderno avatar
lá cờ us
Chúng ta thường nói về *cơ sở dữ liệu*, nhưng thực tế là phép đối chiếu có thể được thay đổi đối với các bảng đơn lẻ và thậm chí đối với các trường bảng đơn lẻ. Không phải việc đặt đối chiếu cho cơ sở dữ liệu sẽ thay đổi đối chiếu của các bảng hiện có; nó chỉ đặt đối chiếu mặc định cho các bảng được tạo sau khi thay đổi đối chiếu. Tôi đã cập nhật câu trả lời để làm cho điều đó rõ ràng hơn.

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