SMF Thailand.
SMF Development => Fixed or Bogus Bugs => ข้อความที่เริ่มโดย: specht ที่ 16/02/07, 05:37:07
-
ปัญหาคือ ใช้ฟอรั่มของ SMF 1.1.1 แล้วมีปัญหาการตั้งชื่อกระทู้ภาษาไทย เท่าที่ลองตรวจสอบตาม error มันไปจบลง MySQL ตารางที่เก็บชื่อกระทู้ไว้สำหรับการค้นหา ซึ่ง Data Type ของ Field นี้ตั้งไว้เป็น VARCHAR(20) จะแก้ปัญหาอย่างไรดี?
รายละเอียดเบื้องต้นที่เกี่ยวข้อง
Forum : SMF 1.1.1
MySQL : 5.0.27 (Strict Mode)
Encoding : utf8_unicode_ci ทั้งตัวภาษาและการเรียงลำดับ
ตารางใน MySQL ของ SMF ที่มีปัญหา : smf_log_search_subjects
Field ที่มีปัญหา : word (ไว้สำหรับตัดคำจากชื่อกระทู้และใช้เพื่อการค้นหา)
Data Type : VARCHAR(20)
ความรู้ด้าน php และ mysql : ไม่มี ปกติเคยลง CMS และ Forum ปรับแต่งทั่วไป ไม่เคยแก้ php หรือ mysql เลย จึงมาขอความช่วยเหลือเพราะต้อง set เจ้า SMF ให้ได้
เท่าที่ผมลองไปอ่านจากเว็บของ mysql อธิบายเรื่อง Data Type แบบ CHAR() และ VARCHAR() คือเป็นเรื่องของการนับตัววรรค ดังนั้นผมเลยคิดว่าพอมันมาเจอภาษาไทยเลยมีปัญหากับการวรรคคำ และด้วยค่าที่มันกำหนดไว้เป็น (20) ทำให้อักขระสูงสุดที่จะตัดเข้าเก็บจะมีเพียง 20 ตัว เมื่อเงื่อนไขบางอย่างไม่ตรงตามนี้มันเลยเกิด error ขึ้น โดย error ที่ฟ้องจากตัวของ SMF แจ้งมาว่า
Database Error
Data too long for column 'word' at row 1
File: D:\xxxx\xxxx\httpdocs\forums\Sources\Subs.php
Line: 457
เมื่อตามไปดูบรรทัดนั้น (คัดมาให้ตั้งแต่บรรทัดที่ 442 - 459 โดยบรรทัดตาม error เป็นบรรทัดที่ 457 คือ VALUES (" . implode('), )
// Insert the new subject.
if ($parameter2 !== null)
{
$parameter1 = (int) $parameter1;
$parameter2 = text2words($parameter2);
$inserts = array();
foreach ($parameter2 as $word)
$inserts[] = "'$word', $parameter1";
if (!empty($inserts))
db_query("
INSERT INTO {$db_prefix}log_search_subjects
(word, ID_TOPIC)
VALUES (" . implode('),
(', array_unique($inserts)) . ")", __FILE__, __LINE__);
}
break;
มันก็คือตาราง smf_log_search_subjects ใน Field ของ word
ทั้งหมดนี้ผมสมมติฐานเอาตามความรู้ที่แทบจะไม่มีเลยในการแก้ปัญหาของ DB error หากว่ามีวิธีแก้ แหล่งข้อมูล คำแนะนำหรือที่นำมาลงทั้งหมดนี้ผิดประเด็นก็ขอคำชี้แนะด้วยครับ
ขอขอบคุณล่วงหน้า