โดยปกติแล้วการเปรียบเทียบข้อความ (string comparison) ใน MySQL จะเป็นการเปรียบเทียบแบบ Case-Insensitive นั่นคือ ไม่สนใจตัวเล็กตัวใหญ่ หมายถึงว่า “cat” จะเท่ากับ “CAT” นั่นเอง ปัญหานี้จะพบเมื่อเราทำการเปรียบเทียบ String ที่เป็น Text ในบางครั้ง เราจำเป็นต้องเปรียบเทียบ string แบบ Case-Sensitive เช่น การค้นหา Key ที่ case ของตัวอักษรมีความสำคัญ เราสามารถทำได้หลายวิธี
แบบแรกคือ การเปรียบเทียบด้วย Binary String เช่น
mysql>SET @s = BINARY 'MySQL';mysql>SELECT @s = 'mysql';
+--------------+ | @s = 'mysql' | +--------------+ | 0 | +--------------+
แบบที่สองคือ การสั่งเปลี่ยน COLLATE ให้เป็นแบบที่สนับสนุนการเปรียบเทียบแบบ case-sensitive นั่นคือ latin1_bin หรือ latin1_general_cs เช่น
mysql>SET @s1 = 'MySQL' COLLATE latin1_bin,->@s2 = 'mysql' COLLATE latin1_bin;mysql>SELECT @s1 = @s2;+-----------+ | @s1 = @s2 | +-----------+ | 0 | +-----------+
แบบที่ 3 ก็เป็นการเปลี่ยน Collation เช่นเดียวกัน แต่เป็นการไปตั้งค่าที่ field ใน table ของเราเลยครับ แค่เพียงเลือก field ที่ต้องการ และเปลี่ยน collation ให้เป็น latin1_bin หรือ latin1_general_cs ก็ใช้ได้แล้วครับ
อ้างอิง
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.