Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > MSSQL Collation : Cyrillic_General_CI_AS Query ออกมาเป็นเครื่องหมายคำถาม



 

MSSQL Collation : Cyrillic_General_CI_AS Query ออกมาเป็นเครื่องหมายคำถาม

 



Topic : 135170



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook



ขออนุญาตสอบถาม เรื่อง sql server (MSSQL)ครับ

ผมมีฐานข้อมูลตั้ง collation เป็น Thai_CI_AS

แล้วในตารางมีคอลัมชื่อ Name กำหนดคอลัมเป็น nvarchar และcollation ของคอลัมนี้ ใช้ Cyrillic_General_CI_AS
(ไม่สามารถเปลี่ยนใช้อย่างอื่นได้ต้องใช้ฐานข้อมูลนี้กับโปรแกรมอื่น เป็นของรัฐเซีย)

ผม Insert ข้อมูล ในฐานข้อมูลแสดงภาษาไทยปกติ
php และ sql
สามารถ where ข้อมูลเป็นภาษาไทยได้่


ปัญหาคือผมselectข้อมูลออกมากับเป็นเครื่องหมายคำถาม ??????

ลอง echo iconv('CP874', 'UTF-8', $row['name']); ก็ไม่ได้ ลองเปลี่ยนจาก Cyrillic_General_CI_AS เป็น Thai_CI_AS ดึงออกมาเป็นภาษาไทยปกติ แต่อย่างที่บอกไว้อีกโปรแกรมจะไม่ทำงาน

อยากทราบว่าปัญหานี้คืออะไรรบกวนทุกท่านด้วยครับ



Tag : PHP, Ms SQL Server 2008







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2020-04-28 12:34:59 By : โปรตั้ว View : 2532 Reply : 15
 

 

No. 1



โพสกระทู้ ( 1,096 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ลองดูครับ
Code (PHP)
setlocale(LC_ALL, 'th_TH.utf-8');







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-28 12:49:22 By : Pong Thep
 


 

No. 2



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ตอนบันทึกไฟล์ การ encoding ของมัน..ถ้าไม่ได้ใช้ collation unicode ก็ลองบันทึกเป็นอย่างอื่น เช่น tis 620.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-28 13:38:40 By : mr.v
 

 

No. 3



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 1 เขียนโดย : Pong Thep เมื่อวันที่ 2020-04-28 12:49:22
รายละเอียดของการตอบ ::
ผมลองแล้วยังแก้ไม่ได้ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-28 23:31:25 By : โปรตั้ว
 


 

No. 4



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


เจออีกคนแล้ว รู้จักไหม code responding คุณโต้ตอบมาอย่างนี้ใครจะใช้ ค.ว.ย. (คิด วิเคราะห์ แยกแยะ) ได้ครบ


ขอโคีดการแสดงข้อมูลมาดูครับ ทั้ง php และ html ครบองค์ประกอบ เน้นนะครับ แค่ครบองค์ประกอบ ไม่ต้องทั้งหมดถ้าโค๊ดมันยาวมาก
เพื่อจะได้รู้ว่าคุณเข้าใจการเขียนจริงตามที่ข้างบนเขาบอก

ผมบอกก็เหมือนข้างบนที่เขาบอกไว้แล้ว
แต่คนทำเข้าใจอย่างไร

ปล.
iconv('CP874', 'UTF-8//IGNORE', $row['name']); เพิ่มสีแดงเข้าไปดูหน่อย
https://www.php.net/manual/en/function.iconv.php


ประวัติการแก้ไข
2020-04-29 06:22:10
2020-04-29 06:26:59
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-29 06:19:18 By : Chaidhanan
 


 

No. 5



โพสกระทู้ ( 4,169 )
บทความ ( 7 )

Hall of Fame 2012

สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-04-29 06:19:18
รายละเอียดของการตอบ ::
555+ ชอบมุข ค.ว.ย ซื้อครับมุกนี้

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-29 09:30:16 By : Genesis™
 


 

No. 6



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : Genesis™ เมื่อวันที่ 2020-04-29 09:30:16
รายละเอียดของการตอบ ::
ตามสบายครับ 5555 ก๊อปเขามาอีกที

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-29 12:06:21 By : Chaidhanan
 


 

No. 7



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 4 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-04-29 06:19:18
รายละเอียดของการตอบ ::
... ใส่ความคิดเห็นตรงนี้.......


ขออภัยครับที่ตอบกลับแบบนี้

นี้คือโค๊ดที่ผมใช้ทดลองเรียกข้อมูลครับ

Code (PHP)
<!DOCTYPE html>
	<html>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<head>
	<title>Page Title</title>
	</head>
	<body>
<?php
	
	$conn = mssql_connect("localhost","rf","12345") or die("Error Connect to Database");
		$char_query =  mssql_query("SELECT Name,nickname FROM RF_WORLD.dbo.tbl_base");
		setlocale(LC_ALL, 'th_TH.utf-8');
			while($row = mssql_fetch_array($char_query)){
?>
			 <table border="1">
				<tr>	
					<td style="width: 180px; padding : 10px;" >	
					
						<?php  echo iconv('CP874', 'UTF-8//IGNORE', $row['Name']); ?>
						
					</td>
				</tr>
			 </table>
<?php
			}
?>
	</body>
	</html>




ประวัติการแก้ไข
2020-04-30 01:08:28
2020-04-30 01:09:07
2020-04-30 01:09:40
2020-04-30 01:10:38
2020-04-30 01:11:18
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-30 01:00:34 By : โปรตั้ว
 


 

No. 8



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ทดสอบให้ดูหน่อยครับ
Code (PHP)
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>Page Title</title>
</head>
<body>
<?php	
$conn = mssql_connect("localhost","rf","12345") or die("Error Connect to Database");
	$char_query =  mssql_query("SELECT top 1
		CONVERT(VARBINARY(25), Name, 1) ad CName,
		Name
		FROM RF_WORLD.dbo.tbl_base");
		//setlocale(LC_ALL, 'th_TH.utf-8');
		while($row = mssql_fetch_array($char_query)){
?>
		 <table border="1">
			<tr>	
				<td style="width: 180px; padding : 10px;" ><pre>					
					<?=json_encode($row)?>
				</pre><br>
				<?=Hex2Bin($row['CName']?><br>
				<?=$row['Name']?><br>
				</td>
			</tr>
		 </table>
<?php }?>
</body>
</html>


ปล. ถ้ามี structure table มาดูด้วยก็ดีนะครับ


ประวัติการแก้ไข
2020-04-30 06:25:54
2020-04-30 06:28:21
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-30 06:19:19 By : Chaidhanan
 


 

No. 9



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ผมได้ลองโค๊ตแก้ไขบางจุดแต่ยัง error ครับ
message: Error converting data type nvarchar to varbinary. (severity 16)

Code (PHP)
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>Page Title</title>
</head>
<body>
<?php 
	
$conn = mssql_connect("localhost","rf","12345") or die("Error Connect to Database");
		$char_query =  mssql_query("SELECT top 1
		CONVERT(VARBINARY(25), Name, 1) AS CName,Name
		FROM RF_WORLD.dbo.tbl_base");
		//setlocale(LC_ALL, 'th_TH.utf-8');
			while($row = mssql_fetch_array($char_query)){
			 ?>
			 <table border="1">
			<tr>	
				<td style="width: 180px; padding : 10px;" >
				<pre>					
					<?=json_encode($row)?>
				</pre><br>
				<?=Hex2Bin($row['CName'])?><br>
				<?=$row['Name']?><br>
				</td>
			</tr>
		 </table>
		<br>
			 <?php
			}
?>
</body>
</html>


การตั้งค่าใน SSMS ครับ
workd
base
show

เกี่ยวไหมครับว่า Cyrillic_General_CI_AS แสดงภาษาไทยไม่ได้
แต่ใน SSMS แสดงได้ ก็ยัง งงๆอยู่ครับ
ข้อมูลภาษาไทยก็สามารถ where หาจาก php ได้
แต่กลับแสดงเป็น ?????


ประวัติการแก้ไข
2020-04-30 17:51:55
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-30 17:51:09 By : โปรตั้ว
 


 

No. 10



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ถ้าเป็น ตระกูล nvarchar nchar ntext ตัดเรื่อง collation ออกไปได้เลยครับ ไม่เกี่ยว
เพราะตระกูล n..... จะเป็น utf8 ไม่ใช้ collation ครับ

ไม่ต้อง ใช้ iconv echo ออกไปตรงๆ ได้เลย
แต่เดา ว่าตอน นำเข้าข้อมูล มีการแปลง เป็น win874 หรือ tis-620 มากกว่า ซึ่งผิดวิธีการนำเข้า
หรือ html doctype ตอนนำเข้าไม่ใข่ utf8 หรือเปล่า

เวลานำเข้าสำหรับ n..... ให้ใช้ set fieldname = n'ทดสอบภาษาไทย' ถีงจะแสดงผลแบบ utf8 โดยไม่ต้องแปลงอะไร

ที่นี้การแก้ปัญหาตอนนี้ ลอง
iconv( 'tis620', 'utf8//ignore', fieldname); ดูครับเนื่องจากนำเข้า เป็นภาษาไทย ไม่ใช่นำเข้าด้วยภาษารัสเซีย
แต่ไม่รับรองว่าจะได้ เพราะไม่รู้ว่าตอนนำเข้าทำแบบไหน

ปล. sql statement ไม่ต้อง convert อะไรทั้งสิ้น ใช้ php iconv พอ


ประวัติการแก้ไข
2020-04-30 18:15:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-04-30 18:13:59 By : Chaidhanan
 


 

No. 11



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

จากการทดลองสร้างตารางใหม่ ตั้งค่าตามฐานข้อมูลเดิม

ผมลองบันทึกแบบunicode
Insert .... N'ภาษาไทย'
โดนตั้งค่า
Name เป็น Cyrillic_General_CI_AS
Nickname เป็น Thai_CI_AS


ใส่
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
teste4


ถ้าใช้ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
ภาษาเพี้ยนหมด
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-05-01 13:57:06 By : โปรตั้ว
 


 

No. 12



โพสกระทู้ ( 9,586 )
บทความ ( 2 )



สถานะออฟไลน์


ถ้าใช้ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
ต้องใช้ echo iconv('tis-620', 'utf-8', $name);


ถ้าใช้ <meta http-equiv="Content-Type" content="text/html; charset=tis-620">
ต้องใช้ echo $name;

เพราะตอนนำเข้าเป็น ภาษาไทยไงครับ

ก็ไม่รู้ว่า ตอนนำเข้าๆ ยังไง ถ้าบอกวิธีนำเข้า และ table structure
คนอื่นๆก็ตอบได้กันหมดแล้วล่ะครับ กว่าจะตอบได้ ก็ต้องขอโน่นนี่นั่น ต้องลองอ้อมโลกไปอีก
ที่แรกผมเองก็นึกว่าใช้ varchar เลยให้ลอง convert เป็น hexa จะได้รู้ว่าข้อมูลถูกต้องไหม
แต่มันดันเป็น nvarchar มันเลยมีเออเร่อร์ แต่ก็ทำให้รู้ว่าเก็บแบบไหน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-05-01 14:40:36 By : Chaidhanan
 


 

No. 13



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 12 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-05-01 14:40:36
รายละเอียดของการตอบ ::
ขอบคุณครับตอนนี้ก็ยังแก้ไม่ได้

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-05-02 08:39:46 By : โปรตั้ว
 


 

No. 14



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

SQL server เพิ่งมี UTF-8 ในเวอร์ชัน 2019
https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15

SSMS แสดงได้ถูกต้องเพราะใช้ code page จาก client OS ซึ่งเป็นภาษาไทย
การบันทึกภาษาหนึ่ง(unicode) ลงใน collation ที่เป็นอีกภาษาหนึ่ง(โดยเฉพาะกรณีของคุณเป็น UCS-2) unicode จะถูกแปลงเป็น code ตามรูปแบบของ collation ของภาษาที่กำหนด(Cyrillic) พอดึงกลับมาแสดงเราจะไม่ได้โค้ดจากต้น Unicode แต่ได้อันที่แปลงเป็นรัสเซีย รหัสอักขระภาษาที่รับกลับมาไม่ตรงกับปลายทาง(ภาษาไทย) รหัสนั้นไม่มีจึงเกิด error และแสดงเป็น ?


ในเมื่อมันยุ่งยากในการจัดการ
ในระดับฐานข้อมูล (db level) ก็ใส่ collation มันทั้งสองแบบ โดยเพิ่ม column ทำเป็นคู่กัน
ในระดับโปรแกรม (app level) ค่อยคิวรี่แยกเอา




หมายเหตุ มโนตามรูปและอิง ยังไม่ลอง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-05-02 17:52:19 By : PhrayaDev
 


 

No. 15



โพสกระทู้ ( 15 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 14 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-05-02 17:52:19
รายละเอียดของการตอบ ::
ขอบคุณคำแนะนำครับ​ ผมก็คิดอยู่ว่าใช่คอรัมที่สามารถเหมืยนกัน​ มีการแก้ไขอีกคอรัมก็แก้ไข​ ขอบคุณครับมากจริงๆครับ​เดี๋ยวไปศึาษาต่อ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-05-03 23:28:51 By : โปรตั้ว
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : MSSQL Collation : Cyrillic_General_CI_AS Query ออกมาเป็นเครื่องหมายคำถาม
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่