SMF Development > Fixed or Bogus Bugs

ภาษาไทย กับ Data Type แบบ VARCHAR()

(1/1)

specht:
ปัญหาคือ ใช้ฟอรั่มของ 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 หากว่ามีวิธีแก้ แหล่งข้อมูล คำแนะนำหรือที่นำมาลงทั้งหมดนี้ผิดประเด็นก็ขอคำชี้แนะด้วยครับ

ขอขอบคุณล่วงหน้า

นำร่อง

[0] ดัชนีข้อความ

ไปที่เวอร์ชันเต็ม