Saturday, June 25, 2005

 

MySQL Import ตารางมีข้อผิดพลาด


วันนี้ทำการ import ตารางข้อมูลจากเครื่องเซิร์ฟเวอร์จำลอง (localhost) ขึ้นเซิร์ฟเวอร์จริง (www.bc.msu.ac.th) ปรากฏ error ดังนี้

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='News Table' AUTO_

ก ็กลับมาดูว่ามี อะไรเกิดขึ้นปรากฏว่าเครื่อง localhost ลง MySQL เวอร์ชัน 4.1.10 ส่วน MySQL ที่เซิร์ฟเวอร์เป็นเวอร์ชัน 4.0.15 ก็สรุปได้ว่าเป็นปัญหานี้เกิดจากการ Import โครงสร้างตารางจากเวอร์ชัน 4.1.x ไปสู่เวอร์ชัน 4.0.x หรือต่ำกว่า เพราะในเวอร์ชัน 4.1.x จะมีการเพิ่มพารามิเตอร์ DEFAULT CHARSET="xxx" เข้ามาด้วย และ เปลี่ยนพารามิเตอร์ TYPE=MyISAM เป็น ENGINE=MyISAM ซึ่งแตกต่างจากในเวอร์ชันก่อนหน้าู่ทำให้เกิด error ขึ้นได้

วิธีการแก้ไขต้องไปลบพารามิเตอร์ DEFAULT CHARSET="xxx" ออกแล้ว และเปลี่ยนคำว่า ENGINE=MyISAM เป็น TYPE=MySIAM แล้วทำการ Import ใหม่ครับ ทั้งนี้ทั้งนั้นข้อแตกต่างอาจจะมีมาในรูปแบบอื่น การแก้ไขก็คงอาศัยหลักการเดียวกัน คือ ต้องเปรียบเทียบหาว่ามีอะไรที่แตกต่างกันบ้าง แล้วก็แก้ให้เหมาะกับแต่ละเวอร์ชันครับ

เปรียบเทียบโครงสร้างตารางจากสองเวอร์ชัน

MySQL 4.0.x

# phpMyAdmin SQL Dump
# version 2.5.3
# http://www.phpmyadmin.net
#
# โฮสต์: www.bc.msu.ac.th
# เวลาในการสร้าง: 25 มิ.ย. 2005 09:22น.
# รุ่นของเซิร์ฟเวอร์: 4.0.15
# รุ่นของ PHP: 4.3.3
#
# ฐานข้อมูล : `vmdb`
#

# --------------------------------------------------------

#
# โครงสร้างตาราง `web_news`
#

DROP TABLE IF EXISTS `web_news`;
CREATE TABLE `web_news` (
`news_id` int(11) NOT NULL auto_increment,
`news_timestamp` varchar(19) default NULL,
`news_title` varchar(255) default NULL,
`news_head` text,
`news_detail` text,
`news_datetime` varchar(18) default NULL,
`news_order` int(11) default '0',
`news_status` char(1) default NULL,
PRIMARY KEY (`news_id`)
) TYPE=MyISAM COMMENT='News Table' AUTO_INCREMENT=11 ;



MySQL 4.1.x

# phpMyAdmin SQL Dump
# version 2.5.7-pl1
# http://www.phpmyadmin.net
#
# โฮสต์: localhost
# เวลาในการสร้าง: 25 มิ.ย. 2005 9.00น.
# รุ่นของเซิร์ฟเวอร์: 4.1.10
# รุ่นของ PHP: 5.0.4
#
# ฐานข้อมูล : `vmdb`
#

# --------------------------------------------------------

#
# โครงสร้างตาราง `web_news`
#

DROP TABLE IF EXISTS `web_news`;
CREATE TABLE `web_news` (
`news_id` int(11) NOT NULL auto_increment,
`news_timestamp` varchar(19) default NULL,
`news_title` varchar(255) default NULL,
`news_head` text,
`news_detail` text,
`news_datetime` varchar(18) default NULL,
`news_order` int(11) default '0',
`news_status` char(1) default NULL,
PRIMARY KEY (`news_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='News Table' AUTO_INCREMENT=11 ;

This page is powered by Blogger. Isn't yours?