ข้ามไปที่เนื้อหาหลัก

สำรองข้อมูลใน MySQL ด้วย mysqldump ข้อมูลใน MySQL Character-set ภาษาไทย

การ backup ฐานข้อมูลสำหรับ mysql ในบางครั้งจะเกิดปัญหาสำหรับการใช้งานภาษาไทย ที่ตัวอักษรมักจะเกิดเป็น ?????  จึงต้องทำให้มั่นใจก่อนว่า การจัดเก็บข้อมูลที่เป็นภาษไทย สมบูรณ์ จึงมีการแปลง character set ก่อน สำหรับในการแปลงฐานข้อมูลจากเดิมที่เป็น latin1 หรือ tis620 ให้เป็น utf8
มีเงื่อนไขเบื้องต้นว่า หาก character-set ของฐานข้อมูลเป็น tis620 หรือ  latin1 ต้องไม่กำหนดค่า
default-character-set=utf8
ใน my.cnf (สำหรับ Linux อยู่ที่ /etc/my.cnf หรือ /etc/mysql/my.cnf)

หลายคนอาจจะชินกับการใช้ phpMyAdmin หากใช้แล้วไม่มีปัญหาก็ใช้ต่อไปครับ โดยปกติ เวลาจะ dump ข้อมูลโดยใช้ phpMyAdmin ก็ใช้วิธี export ออกมาเป็น SQL จะดีที่สุด วิธีที่จะดูว่า มีปัญหาหรือไม่ ก็คือ ลองเปิดไฟล์ที่ Export ออกมานั้นด้วย Text Editor ดู หรือใช้ command อื่นๆ เปิดดูก็ได้ครับ หากสามารถอ่านออกเป็นภาษาไทยได้ ก็แสดงว่า ไม่มีปัญหาครับ
ในที่นี้อยากแนะให้ใช้คำสั่ง mysqldump ซึ่งเป็น command line tool ที่นิยมใช้ใน Linux ครับ เข้าใจว่า ใน MS WIndows ก็มีเหมือนกัน วิธีใช้ก็ไม่น่าจะต่างกันมากครับ
ในการ dump ข้อมูล สิ่งที่ต้องทราบคือ character-set ของข้อมูลคือ อะไร ส่วนใหญ่จะไม่หนีจาก 3 ตัวนี้ครับ คือ latin1, tis620 และ utf8
หากไม่ทราบ ก็ลองด้วยการกำหนด character-set ไปเรื่อยๆ
วิธีการใช้คำสั่งก็ คือ
mysqldump --default-character-set=latin1 -h MySQLserver -u username -p DBName >DBName.sql
ตัวสีแดงคือ ค่าที่ต้องกำหนดให้ถูกต้องครับ หากเครื่องที่ทำการเรียกคำสั่ง mysqldump เป็นเครื่องเดียวกับ MySQL Server ก็ไม่ต้องมี   "-h MySQLserver" ก็ได้ครับ
username คือ ชื่อ user ที่มีสิทธิ์ในการ access ฐานข้อมูล DBName
หากโปรแกรมจัดการฐานข้อมูลที่ใช้อยู่แสดงผลเป็น character-set 8 bits (พวก tis-620, windows-874, iso-8859-11) การกำหนด  --default-character-set=latin1 มักจะไม่มีปัญหาครับ ซึ่งหมายถึงอ่านออกเป็นภาษาที่ถูกต้องแน่นอนครับ
แต่สิ่งที่ต้องทราบต่อไปก็คือ ภาษาไทยที่แสดงนั้น มี  character-set ที่แท้จริงเป็น tis620 ครับ ไม่ใช่ latin1 ครับ
หากเปิดไฟล์  DBName.sql ดู จะพบว่า ที่หัวไฟล์มีหลายบรรทัดเป็น
-- MySQL dump 10.9
--
-- Host: localhost    Database: moodle
-- ------------------------------------------------------
-- Server version       4.1.20
ส่วน 5 บรรทัดข้างบนนี้ เป็น comment จะไม่สนใจก็ได้ครับ
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 *
/;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
หลายบรรทัดเหล่านี้ดูเหมือนจะเป็น comment แต่ไม่ใช่ครับ มันมีความหมายครับ เช่น 40101 หมายถึง MySQL รุ่น 4.1.1 และ 40014 หมายถึง MySQL รุ่น 4.0.14 และในแต่ละบรรทัดก็มีความหมายว่า  หากเป็น MySQL รุ่นเท่ากับหรือสูงกว่าที่บอกไว้ต้นบรรทัด ก็จะ run คำสั่งที่ตามมา เช่น
/*!40101 SET NAMES latin1 */; ก็หมายถึง หากเรา import ข้อมูล  DBName.sql เข้า MySQL Server รุ่นที่เท่ากับหรือสูงกว่า 4.1.1 ก็จะมีการสั่งให้ SET NAMES latin1 ซึ่งหมายถึงการตั้งค่าการสื่อสารข้อมูลด้วย character-set lantin1 แต่ถ้าเป็นการ import ข้อมูลเข้า MySQL Server รุ่นที่ต่ำกว่า 4.1.1 บรรทัดนั้นก็จะถูกข้ามไปครับ
สิ่งที่สำคัญในที่นี้ก็คือ การกำหนดให้เป็น latin1 ในที่นี้ อาจจะทำให้ import ข้อมูลผิดพลาด หากไม่แน่ใจก็ให้ลบบรรทัดนี้ทิ้งไป
ส่วนที่จะเป็นปัญหาต่อมา คือ ในส่วนของไฟล์ที่เกี่ยวกับการสร้างตาราง เช่น


ตรวจสอบไฟล์ให้แน่ใจว่า สามารถอ่านได้เป็นปกติ โดยที่เป็น tis-620
ขั้นตอนต่อมา คือ การ import ข้อมูลเข้า MySQL Server ที่กำหนด default-character-set=utf8 ใน my.cnf แล้ว
โดยปกติ ก็ใช้คำสั่ง
mysql --default-character-set=tis620 -h MySQLserver -u username -p DBName <DBName.sql
สังเกตว่า การกำหนด  --default-character-set=tis620 ในคำสั่งนี้ ต้องระบบ character-set ของไฟล์ให้ตรงกัน โดยไม่จำเป็นต้องแปลงไฟล์ให้เป็น utf8 ครับ เพราะ MySQL Server จะทำการแปลงให้เอง
สิ่งสำคัญต่อไป ก็คือ โปรแกรมที่ใช้จัดการฐานข้อมูลครับ ต้องใช้ character-set เหมือนกับของฐานข้อมูลเท่านั้นครับ และก็มีเคล็ดลับอีกเล็กน้อย ซึ่งจะได้กล่าวในบันทึกอื่นต่อไปครับ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Anvil แฟลต์ฟอร์ม สำหรับ Python Full Stack มีครบ จบในเครื่องมือเดียว

Anvil แฟลต์ฟอร์ม สำหรับ Python Full Stack มีครบ จบในเครื่องมือเดียว Avil เป็นแฟลต์ฟอร์มสำหรับสร้างเว็บแอพลิเคชั่น ด้วยภาษา python สามารถใช้งานทั้ง HTML CSS JavaScript SQL ทั้งหมดนี้รวมในเครื่องมือที่ชื่อว่า Anvil Python ใช้สำหรับรันบนบราวเซอร์ เซอร์เวิรส์ และสร้าง UI ด้วยวิธีการ Drag-and-Drop เพียงลากวาง UK และยังสามารถเชื่อมต่อและใช้งาน Database  และยังสามารถ Integration กับแฟลต์ฟอร์มอื่นๆ ได้อีกด้วย โครงสร้างของ Anvil  การออกแบบง่ายๆ ด้วย drag-and-drop ใช้ python เป็น client-side และรันบน บราวเซอร์ Server-side รันบน Anvil Server สามารถใช้ Database ต่างๆ เพื่อเก็บข้อมูล สามารถรัน python บนเครื่องและตอบโต้กับแอปพลิเคขั่นไดด้

TomCat สำหรับติดตั้ง แก้ไข คอนฟิก ใช้งาน JSP

Apache Tomcat เป็น  HTTP Server ที่มีความสามารถนำภาษาจาวามาใช้งานได้  สามารถใช้เทคโนโลยีของภาษาจาวาที่เรียกว่า Java Servlet  และ Java Server Page (JSP)  Tomcat เป็นโปรแกรม Open-Source  อยู่ภายใต้การดูแลของ Apache Software Foundation  (ซึ่งเป็นผู้สร้าง Apache HTTP Server ที่เป็นที่นิยมใช้กันอย่างแพร่หลาย)  สามารถอ่านรายละเอียดของ Tomcat ได้ที่  http://tomcat.apache.org  โดยเลือกหัวข้อ “ Documentation”  และเลือก “Tomcat 7.0” ขั้นตอนการติดตั้ง Tomcat เรียงลำดับดังนี้

10 Game Engine สำหรับการพัฒนาโปรแกรมเกมส์ด้วยที่ทรงประสิทธิภาพ

เอ็นจิ้นเกม (Game Engine )คืออะไร  เอ็นจิ้นเกม game คือ เฟรมเวิร์กซอฟต์แวร์ที่ใช้ในการพัฒนาวิดีโอเกม พูดง่ายๆ คือ เครื่องมือสำหรับการเขียนโค้ดในการสร้างวิดีโอเกม ช่วยแก้ปัญหาที่ต้องจัดการกับการเรนเดอร์กราฟิก Render ตลอดจนใช้จัดการกับข้อมูลของผู้ใช้ หรือการนำกฎต่างๆ ฟิสิกส์ไปใช้ในโลกของเกม สิ่งเหล่านี้ (และอื่น ๆ ) เป็นข้อกังวลและข้อจำกัดในการพัฒนาเกมส์ที่เอ็นจิ้นเกมมาช่วยจัดการให้ เพื่อปรับปรุงกระบวนการพัฒนาให้มีประสิทธิภาพ โดยมอบโค้ดและเครื่องมือที่นำมาใช้ซ้ำให้กับผู้เขียนโค้ดได้ แทนที่จะเขียนโค้ดทุกอย่างตั้งแต่เริ่มต้น เอ็นจิ้นเกมช่วยให้ผู้เขียนโค้ดมุ่งความสนใจไปที่การออกแบบการเล่นเกมและสร้างประสบการณ์ที่ไม่เหมือนใคร โดยรวมแล้ว เอ็นจิ้นเกมที่คุณเลือกจะส่งผลต่อแพลตฟอร์มเกม เช่นเดียวกับเกมที่คุณสร้าง เครื่องยนต์แต่ละตัวมีคุณสมบัติ จุดแข็ง และจุดอ่อนที่แตกต่างกัน ดังนั้นการเลือกเครื่องยนต์ให้เหมาะสมจึงเป็นสิ่งสำคัญ เอ็นจิ้นเกมยอดนิยมที่นักพัฒนาใช้ในปัจจุบัน ได้แก่ Unity, Unreal Engine และ Godot 1. Unity Unity เป็น Game Engine หนึ่ง หรือเครื่องมือสำหรับนักพัฒนาเกมได้ทั้งรูปแบบ 2 มิต...