ขอสอบถามเรื่องการ set default-character

ขอสอบถามเรื่องการ set default-character ให้ทุกๆ User ในระบบ เป็น Default ตัวเดียวกันครับ

ปกติแล้วเราจะกำหนดใน my.cnf แต่ด้วย เครื่องมี user เก่าอยู่แล้ว หากไป set เลยคาดว่าจะทำให้ user ที่มีอยู่อ่านภาษาไทยไม่ออกแทนครับ

ท่านใดพอจะแนะนำได้บ้าง หรือมี command ที่ set user ทั้งหมดเป็น default ตัวเดียวกันก่อน ที่จะ set พวกนี้ลง my.conf หนะครับ

เอ่หรือว่า add ได้เลยไม่มีปัญหา กับ user ครับ ** พอดียังไม่ได้ลอง

ขอบคุณครับ
มีน

[client]
default-character-set=tis620

[mysqld]
init-connect='SET collation_connection = tis620_thai_ci’
init-connect='SET NAMES tis620’
default-character-set=tis620
character-set-server=tis620
collation-server=tis620_thai_ci

[mysql]
default-character-set=tis620

credit พี่หนึ่ง(Devone)แนะนำครับ

ขอก๊อปเก็บไว้ ขอบคุณครับ

ไม่ใช่ผมครับ

service mysqld stop

cd /var/lib/mysql

find ./ -name “db.opt” | xargs rm -f

*** แก้ไข my.cnf ***

service mysqld start

แล้วข้อมูลภาษาไทยใน db ที่มีอยู่แล้วจะเละมั้ยครับ

ถ้า default เป็น latin1 ยังไงแนะนำให้ dump ออกมาก่อนครับ
แล้วลบข้อมูลเดิมทิ้งทั้งหมด พร้อมทั้งสั่ง insert ใหม่

flag ที่ใช้ dump นะครับ (ยาวหน่อย)

mysqldump --all-databases --quote-names --add-drop-database --add-drop-table --add-locks --disable-keys --skip-set-charset --order-by-primary

เอาไปอ่านให้งงเล่นครับ

[mysqld]
init-connect='SET collation_connection = tis620_thai_ci’
init-connect='SET NAMES tis620’
default-character-set=tis620

[mysql]
default-character-set=tis620

ผมใส่เท่านี้ครับ

ครับ ตามบทความ iconv ใช้ได้ดีทีเดียว เมื่อก่อนจาก Mysql 5 ไป mysql 4.1 เล่นผมปวดหัวมากๆ ลองมันทุกวิธีก็ไม่ได้ มาใช้ iconv ช่วยได้เยอะเลย
ถ้ามีเยอะก็คงต้องเขียน shell สคริบเอาช่วยเอา แต่เราก็ทำมันทั้งก้อนก็ได้นี่ครับ dump all เลย แล้วก็แปลงแล้วก็เอาเข้าใหม่ได้

แปลง charset mysql ไม่ใช่เรื่องน่าห่วงหรอกครับ แป๊บเดียวก็เสร็จ

แต่ที่เหนื่อยก็คือไล่แก้ charset ของแต่ละเวบจาก tis-620 ให้เป็น utf-8 นี่ล่ะ
ไฟล์ language ถ้าไม่ได้เก็บใน db แต่เป็นไฟล์ในเครื่อง ก็ต้องเปิดเอามาแปลงเป็น utf-8 ด้วย
แล้วก็ charset ใน header ก็ต้องไล่แก้ด้วย รวมถึง html ไฟล์ที่มีภาษาไทยอีก แก้กันมันส์ครับ
ไม่งั้นก็แสดงผลกันคนละภาษากับ database เรียกว่า database เป็น utf-8 แล้ว แต่ตัวเวบ interface ยังเป็น tis-620 อยู่

ขอบคุณพี่ๆ ทุกท่านมากครับ
อย่างที่พี่ kke บอกครับ มันจะไปยากตรงแก้ทีละ user นี่หละครับ
เพราะในบาง user ตัว open source มีการ ตั้ง char ในการใช้งานของสคิบไว้ด้วย

เท่าที่ผมลองอย่างที่พี่ไก่แนะนำ (Thaitumweb)
user ที่มีอยู่ก่อนๆ จะ กลายเป็น ??? แทนครับ

หากจะดำเนินงานจริงๆ คงต้องดรั้มออกมาแล้ว ลบ create แล้ว insert เข้าใหม่ครับ

ในกรณีที่สมาชิกมีปัญหา กันเยอะๆ และปรับตัวกันไม่ทันครับ
1 ให้ down version phpmyadmin ก่อนครับ เพราะการแสดงผลบางทีหน้าเว็บเป็นภาษาไทย ใน phpmyadmin อ่านไม่ออกหรือกลับกัน
2. ติดตั้งสคิบใหม่ ครับ แล้วใช้ฐานข้อมูลเดิมก็ช่วยได้เยอะทีเดียวครับ(จะมีผลชัดเจนในสคิบบางตัวครับ)

การแปลงด้วยมือนะครับ

1 ให้เปิด file .sql ขึ้นมาครับ ดำเนินการลบ DEFAULT CHARSET=tis620
โดยวิธีง่ายๆ และรวดเร็วโดยเลือกเมนู Search > Raplace >
Find : ใส่ DEFAULT CHARSET=tis620
Raplace With ปล่อยว่าง
กด ปุ๋ม Raplace All

หลังจากนั้น หาเพิ่มเติมว่า มีที่ไหน มีการ set char เป็น tis620 อีกบ้างโดย
เลือก Search > Find > ค้นหาคำว่า tis620 จะพบบันทัดที่มี tis620 อยู่
ลบออกครับ " character set tis620 collate tis620_bin"

หลังจากนั้นเลือก Save As เลือก Encoding เป็น Thai Windons 00874

หลังจากนั้น login สู่ phpmyadmin เลือก หน้าแรก MySQL connection collation : latin1_swedish_ci ครับ

หลังจากนั้นดำเนินการ IMPORT File ปกติ
ในขึ้นตอนการ Browse เลือก ชุดอักขระของไฟล์ (character set): เป็น binary แล้วกดปุ๋ม import ปกติครับ

แค่นี้ ครับ
ก็จะใช้ได้ดีครับ
เบื้องต้นนั้นผมได้รับการช่วยเหลือจากพี่แมน kke อย่างดี ขอบคุณมากๆครับ
เพราะช่วงนี้ทำอะไร หน้ามึนไปหมด

อธิบายเพิ่มเติมสำหรับที่น้อง mean อธิบายมานะครับ

คือเครื่องที่ใช้อยู่เป็นการใช้ภาษาไทย tis-620 (แบบ ascii) ในตาราง latin1_swedish_ci ครับ
ตารางที่สร้างขึ้นใหม่ก็จะเป็น latin1 ซึ่งจะสามารถใช้กับ script ต่างๆที่ใช้ meta เป็น charset=tis-620 ได้โดยไม่มีปัญหาใดๆ
แต่การแสดงผลใน phpMyAdmin เวอร์ชั่นหลังๆที่รองรับ utf-8 จะมีปัญหา สามารถแก้ไขได้โดยใช้ phpMyAdmin 2.5.4 แทนก็จะแสดงภาษาไทยได้ถูกต้อง

ถัดมาคือการ import ไฟล์ .sql ที่ export มาจากเครื่องที่ใช้ภาษาไทยแบบ Unicode (ทั้งแบบ utf-8 และ tis620_thai_ci)
ซึ่งตัวอักษรภาษาไทยที่ dump ออกมาอยู่ในไฟล์จะเป็น unicode รวมถึงมีการกำหนด charset เป็น tis620 อยู่ใน sql ไฟล์ด้วย
ดังนั้นเราต้องทำ 2 อย่างด้วยกันคือ 1 เอาที่กำหนด charset ออก และ 2 save ไฟล์ให้เป็น format windows-874
โดยสามารถทำได้โดยใช้โปรแกรม editplus2 ในการเปิดไฟล์และ saveas เป็น windows874
(เคยพบบางไฟล์ เปิดด้วย editplus2 แล้วเละ ต้องใช้ notepad2 เปิดก่อน แล้ว copy มา paste ลงใน editplus 2 อีกทีนึง)
ซึ่งการ convert ตรงนี้เป็นการแก้ไขไฟล์ .sql ที่ export มาไว้แล้ว หากสามารถ export ใหม่ได้ก็ให้ทำตามคำแนะนำด้านบนๆ
ในเรื่องของการให้มัน --skip-set-charset ก็จะไม่ต้องมา search replace อีกรอบ แต่ก็ยังต้อง convert charset ของไฟล์จาก unicode ให้เป็น windows-874 ก่อน

ปัญหาภาษาไทยกับ mysql ยังไงก็หลีกไม่พ้นการต้อง convert จาก ascii <> unicode เพราะมันคนละ encoding กัน

สำหรับเครื่องใหม่ๆที่ยังไม่มีเวบในเครื่อง และไม่มีการย้ายเวบมาจากเครื่องเก่าที่เป็น tis620 แบบ ascii แนะนำให้ set เป็น unicode (tis620_thai_ci) จะดีกว่า
หรือจริงๆแล้วก็สามารถ convert ไฟล์ .sql จาก ascii ไปเป็น unicode ได้ด้วย editplus2 ในวิธีการเดียวกัน (saveas utf-8)

เคยเจอปัญหานี้ตอนย้าย Server ครับ เลยเขียน php มา convert มันทั้ง db เลยครับจบ


<?
error_reporting(E_ALL);

$config["current_charset"] = "latin1"; // Current table character set
$config["destination_charset"] = "tis620"; // Require table charater set
$config["table_prefix"] = "tmp_"; // Temporary table prefix

$config["host"] = "localhost"; //Host address
$config["user"] = "root"; // User account
$config["pass"] = ""; // Password

$l_conn = mysql_connect($config["host"], $config["user"], $config["pass"]);
mysql_query("SET NAMES ".$config["current_charset"], $l_conn);
$obj_db = mysql_list_dbs($l_conn);

$t_conn = mysql_connect($config["host"], $config["user"], $config["pass"]);
mysql_query("SET NAMES ".$config["destination_charset"], $t_conn);

if($obj_db){
	while($l_db = mysql_fetch_object($obj_db)){
		if($l_db->Database == "mysql"){ break; } // Skipping on mysql database
		
		$list_dbs[] = $l_db->Database;
		mysql_query("SET NAMES ".$config["current_charset"], $l_conn);
		$obj_tables = mysql_list_tables($l_db->Database, $l_conn);
		
		$pattern = array('/\blatin1\b/', '/\blatin_swedish_ci\b/', '/CREATE TABLE `([a-zA-Z0-9_-]+)`/');
		$replace = array('tis620', 'tis620_thai_ci', 'CREATE TABLE `'.$config["table_prefix"].'$1`');
		
		while($l_table = mysql_fetch_row($obj_tables)){
			mysql_query("SET NAMES ".$config["current_charset"], $l_conn);
			$res = mysql_query("SHOW CREATE TABLE `".$l_table[0]."`");
			$table_string = mysql_fetch_array($res, MYSQL_ASSOC);
			$table_creation = preg_replace($pattern, $replace, $table_string["Create Table"]);
			
			/****************************************************************************************/
			/*							Temporary table creation									*/
			/****************************************************************************************/
			if(mysql_query(preg_replace($pattern, $replace, $table_string["Create Table"]), $l_conn)){
				echo "Create table ".$config["table_prefix"].$l_table[0]." successful.

";
			}else{
				echo "Create table ".$config["table_prefix"].$l_table[0]." failed.

";
			}
			
			mysql_query("SET NAMES ".$config["current_charset"], $l_conn);
			$result = mysql_query("SELECT * FROM `".$l_table[0]."`", $l_conn);
			
			$num_fields = mysql_num_fields($result);
			$type = "";
			$name = "";
			for($i = 0; $i &lt; $num_fields; $i++){
				$type[] = mysql_field_type($result, $i);
				$name[] = mysql_field_name($result, $i);
			}
			
			$sql =

ผมกำลังนึก และมองหา วิธี

[quote author=mean link=topic=6510.msg60668#msg60668 date=1179508445]
ผมกำลังนึก และมองหา วิธี

ตามอ่านของคุณ Icafe ได้อันนี้เพิ่มมาอีกอันครับ
http://appservnetwork.com/modules.php?name=News&file=article&sid=5