Puncte:2

Nu se poate șterge un Temptore care conține o liniuță en sau o liniuță em

drapel ca

Încerc să șterg o stocare temporară partajată pentru o cheie care conține o liniuță en sau o liniuță em.

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

Aruncă această excepție.

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[HY000]: Eroare generală: 1267 Combinație ilegală de colații (ascii_general_ci,IMPLICIT) și (utf8mb4_general_ci,COERCIBLE) pentru operația „=”: DELETE FROM {key_value_expire} WHERE ("nume" ÎN (:db_condition_placeholder_0)) ȘI ("colecție" = :db_condition_placeholder_1); Matrice ( [:db_condition_placeholder_0] => 2020â2021 [:db_condition_placeholder_1] => tempstore.shared.my_module_name ) în Drupal\Core\KeyValueStore\StorageBase->delete() (linia 52 din core/Coure/Drupal Core/Coure/Drupal /StorageBase.php).

Din câte îmi pot da seama, nu este o problemă cu baza de date, ci mai degrabă cu liniuțele en sau liniuțele em în cheia de stocare. Am încercat să scap de el Html::escape() și utf8_encode(), dar nu a rezolvat problema.

EDITAȚI | ×: Am verificat care este colarea bazei de date locale și returnează UTF8.

mysql> SELECTARE DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME -> FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'drupal9'; +----------------------------+-------------------- ----+ | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +----------------------------+-------------------- ----+ | utf8 | utf8_general_ci | +----------------------------+-------------------- ----+

EDIT2:

Rularea următoarelor interogări a rezolvat problema:

ALTER TABLE `key_value_expire` CHANGE `name` `name` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'Cheia perechii cheie/valoare.';

ALTER TABLE `key_value_expire` CHANGE `collection` `collection` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'O colecție numită de perechi cheie și valoare.';
Puncte:2
drapel us

Acest lucru se întâmplă deoarece setul de caractere pe care îl folosește baza de date nu este utf8mb4 sau colarea nu este utf8mb4_unicode_ci (sau utf8mb4_general_ci). Verificați, de asemenea, ce colaționare folosesc tabelele unice de baze de date și câmpurile pe care le conțin și modificați-o atunci când este necesar.

Instalați Drupal / Pasul 3: Creați o bază de date sugerează acele valori pentru baza de date utilizată din Drupal.

Notă: baza de date trebuie creată cu codificare UTF-8 (Unicode) (utf8mb4) și fie cel utf8mb4_unicode_ci sau utf8mb4_general_ci colaţionare. Diferența dintre cele două colații se referă la cât de repede sunt în compararea și sortarea caracterelor. utf8mb4_general_ci este puțin mai rapid și utf8mb4_unicode_ci este mai precis pentru o gamă mai largă de caractere. Dacă nu sunteți sigur, utilizați utf8mb4_unicode_ci.

Dacă utilizați caractere UTF-8 pentru valorile care sunt salvate în baza de date, veți avea probleme, dacă baza de date este setată să folosească ASCII ca cod de caractere pentru tabelele sale.

user105050 avatar
drapel ca
Am verificat și se pare că baza mea de date folosește utf8_general_ci. S-au adăugat mai multe detalii la postarea inițială.
user105050 avatar
drapel ca
Am verificat tabelul afectat și ai dreptate.Baza de date în sine folosea UTF-8, dar tabelul „key_value_expire” folosea ASCII atât pentru coloanele „nume”, cât și pentru „colecție”. Nu sunt sigur cum sa întâmplat asta.
apaderno avatar
drapel us
De obicei vorbim de *bază de date*, dar efectiv colaţionarea poate fi schimbată pentru tabele individuale şi chiar pentru câmpuri de tabel unice. Nu este faptul că setarea colării pentru baza de date schimbă colarearea tabelelor existente; doar setează colaţionarea implicită pentru tabelele create după schimbarea colaţiei. Am actualizat răspunsul pentru a fi mai clar.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.