Рейтинг:2

Невозможно удалить временное хранилище, содержащее короткое или длинное тире

флаг ca

Я пытаюсь удалить общее временное хранилище для ключа, содержащего короткое тире или длинное тире.

$keyword = '2020–2021';
$tempstore = \Drupal::service('tempstore.shared')->get('my_module_name');
$tempstore->удалить($ключевое слово);

Он выдает это исключение.

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE [HY000]: Общая ошибка: 1267 Недопустимое сочетание сопоставлений (ascii_general_ci, IMPLICIT) и (utf8mb4_general_ci, COERCIBLE) для операции '=': УДАЛИТЬ ИЗ {key_value_expire} ГДЕ ("имя" В (:db_condition_placeholder_0)) И ("коллекция" = :db_condition_placeholder_1); Массив ( [:db_condition_placeholder_0] => 2020–2021 [:db_condition_placeholder_1] => tempstore.shared.my_module_name ) в Drupal\Core\KeyValueStore\StorageBase->delete() (строка 52 core/lib/Drupal/Core/KeyValueStore /StorageBase.php).

Насколько я могу судить, проблема не в базе данных, а в том, что в ключе хранилища есть короткие или длинные тире. Я пытался избежать этого с помощью Html:: побег() и utf8_encode(), но это не решило проблему.

РЕДАКТИРОВАТЬ: Я проверил, какова моя локальная сортировка базы данных, и она возвращает UTF8.

mysql> ВЫБЕРИТЕ DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME -> ИЗ INFORMATION_SCHEMA.SCHEMATA, ГДЕ SCHEMA_NAME = 'drupal9'; +------------------------------------ ----+ | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +------------------------------------ ----+ | utf8 | utf8_general_ci | +------------------------------------ ----+

РЕДАКТИРОВАТЬ2:

Выполнение следующих запросов устранило проблему:

ALTER TABLE `key_value_expire` CHANGE `name` `name` VARCHAR(128) НАБОР СИМВОЛОВ utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Ключ пары ключ/значение.';

ALTER TABLE `key_value_expire` CHANGE `коллекция` `коллекция` VARCHAR(128) НАБОР СИМВОЛОВ utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Именованная коллекция пар ключ-значение.';
Рейтинг:2
флаг us

Это происходит потому, что набор символов, который использует база данных, не utf8mb4 или сопоставление не utf8mb4_unicode_ci (или же utf8mb4_general_ci). Проверьте также, какие параметры сортировки используются отдельными таблицами базы данных и содержащимися в них полями, и при необходимости измените их.

Установите Drupal / Шаг 3: Создайте базу данных предлагает эти значения для базы данных, используемой из Drupal.

Примечание. База данных должна быть создана в кодировке UTF-8 (Unicode) (utf8mb4) и либо utf8mb4_unicode_ci или utf8mb4_general_ci сопоставление. Разница между двумя сопоставлениями связана с тем, насколько быстро они сравнивают символы и сортируют их. utf8mb4_general_ci немного быстрее и utf8mb4_unicode_ci является более точным для более широкого диапазона символов. Если вы не уверены, используйте utf8mb4_unicode_ci.

Если вы используете символы UTF-8 для значений, которые сохраняются в базе данных, у вас возникнут проблемы, если база данных настроена на использование ASCII в качестве кода символов для своих таблиц.

user105050 avatar
флаг ca
Я проверил, и похоже, что моя база данных использует utf8_general_ci. Добавил подробности в исходный пост.
user105050 avatar
флаг ca
Я проверил затронутую таблицу, и вы правы.Сама база данных использовала UTF-8, но таблица «key_value_expire» использовала ASCII для столбцов «имя» и «коллекция». Не знаю, как это произошло.
apaderno avatar
флаг us
Обычно мы говорим о *базе данных*, но фактически параметры сортировки могут быть изменены для отдельных таблиц и даже для отдельных полей таблицы. Дело не в том, что установка параметров сортировки для базы данных изменяет параметры сортировки существующих таблиц; он просто устанавливает параметры сортировки по умолчанию для таблиц, созданных после изменения параметров сортировки. Я обновил ответ, чтобы сделать это более ясным.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.