Categories
Uncategorized

Migrate MS-SQL 2000 to MySQL

เนื่องด้วยที่กรมเนี่ยใช้ MS-SQL 2000 ซึ่งโบราณ และไม่โอเคในการทำงาน ผมจึงต้องการย้ายไปที่ MySQL แล้วจะทำยังไง ?

  1. ติดตั้ง MySQL ODBC Connector
  2. ติดตั้ง MySQL จะใช้ xampp ก็ได้
  3. create database ใน MySQL รอไว้
  4. ไปใน Control Panel ไปสร้าง ODBC ของ MySQL รอไว้
  5. ไปที่ MS-SQL ใช้ Enterprise Manager
  6. คลิกขวาที่ตัว database เลือก task -> export data
  7. เลือก odbc ต้นทาง และปลายทาง กดให้มันทำงาน ก็เรียบร้อย

ปัญหาสำหรับภาษาไทย tis620 vs utf8 แม่งอ่านไม่ออก
การแก้ไขให้ดำเนินการตามนี้

  1. ใน MySQL ให้ dump ออกมาเป็น .sql ผมเลือกใช้ HeidiSQL เพราะมันฟรี
  2. เอา PHP ตามนี้ไปใช้
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
# CONVERT WRONG ODBC TIS620 to UTF8 correctly
ini_set('max_execution_time', 300); 
# INPUT FILE
$fp = fopen("ecar_data.sql","r");
# OUTPUT FILE
$op = fopen("ecar_data_utf8.sql","wb");
$n = 0;
while ($line = fgets($fp)) {
	$a = mb_str_split ($line);
	$new = "";
	foreach ($a as $c) {
		$len = strlen($c);
		if (strlen($c) == 2) { ### multibyte
			$d1 = ord($c[0]) << 8;
			$d2 = ord($c[1]);
			$d = $d1+$d2;
			if (dechex(ord($c[0])) == 'c2') {
				$d = $d - 0xb4a0;
			} elseif (dechex(ord($c[0])) == 'd') {
				$d = 0x0d;
			} else {
				$d = $d - 0xb560;
			}
			$hex = str_pad(dechex($d),4,'0',STR_PAD_LEFT);
			$c = json_decode('"\u'.$hex.'"');
		}
		$new .= $c;
	}
	fputs($op,$new."\n");
}
fclose($op);
fclose($fp);

function mb_str_split( $string ) {
    return preg_split('/(?<!^)(?!$)/u', $string );
} 
?>
</body>
</html>

การ RESEARCH