Score:2

ไม่สามารถลบ tempstore ที่มี en dash หรือ em dash

ธง ca

ฉันกำลังพยายามลบที่เก็บข้อมูลชั่วคราวที่ใช้ร่วมกันสำหรับคีย์ที่มีขีดกลางหรือขีดกลาง

$keyword = '2020â2021';
$tempstore = \Drupal::service('tempstore.shared')->get('my_module_name');
$tempstore->delete($คำหลัก);

มันแสดงข้อยกเว้นนี้

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[HY000]: ข้อผิดพลาดทั่วไป: 1267 การผสมการเรียงที่ผิดกฎหมาย (ascii_general_ci,IMPLICIT) และ (utf8mb4_general_ci,COERCIBLE) สำหรับการดำเนินการ '=': ลบจาก {key_value_expire} โดยที่ ("ชื่อ" ใน (:db_condition_placeholder_0)) และ ("collection" = :db_condition_placeholder_1); Array ( [: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) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT 'คีย์ของคู่คีย์/ค่า';

ALTER TABLE `key_value_expire` CHANGE `collection` `collection` VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ไม่เป็น NULL DEFAULT '' COMMENT 'ชุดของคู่คีย์และค่าที่มีชื่อ';
Score: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 flag
ฉันตรวจสอบแล้วและดูเหมือนว่าฐานข้อมูลของฉันกำลังใช้ utf8_general_ci เพิ่มรายละเอียดเพิ่มเติมในโพสต์เดิม
user105050 avatar
ca flag
ฉันตรวจสอบตารางที่ได้รับผลกระทบแล้วและคุณถูกต้องตัวฐานข้อมูลเองใช้ UTF-8 แต่ตาราง 'key_value_expire' ใช้ ASCII สำหรับทั้งคอลัมน์ 'name' และ 'collection' ไม่แน่ใจว่าเกิดขึ้นได้อย่างไร
apaderno avatar
us flag
เรามักจะพูดถึง *ฐานข้อมูล* แต่สามารถเปลี่ยนแปลงการเรียงอย่างมีประสิทธิภาพสำหรับตารางเดี่ยวและแม้กระทั่งสำหรับเขตข้อมูลตารางเดียว ไม่ใช่ว่าการตั้งค่าการเรียงสำหรับฐานข้อมูลจะเปลี่ยนการเรียงของตารางที่มีอยู่ เพียงแค่ตั้งค่าการเรียงเริ่มต้นสำหรับตารางที่สร้างขึ้นหลังจากเปลี่ยนการเรียง ฉันอัปเดตคำตอบเพื่อให้ชัดเจนยิ่งขึ้น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา