คำนำหน้า N ก่อนสตริงในแบบสอบถาม Transact-SQL


41

คุณช่วยบอกฉันทีฉันควรใช้คำนำหน้า N ก่อนสตริงในแบบสอบถาม Transact-SQL? ฉันเริ่มทำงานกับฐานข้อมูลที่ฉันไม่ได้รับผลลัพธ์ใด ๆ โดยใช้แบบสอบถามเช่นนี้

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

N'%а_pattern%'จนกว่าฉันจะเปลี่ยนรูปแบบไป ฉันไม่เคยเพิ่มคำนำหน้านี้มาก่อนดังนั้นฉันอยากรู้ a_fieldถูกกำหนดให้เป็นnvarchar(255)แต่ฉันคิดว่าเหตุผลเป็นอย่างอื่น

คำตอบ:


31

บทความต่อไปนี้มีข้อมูลที่ดีเกี่ยวกับคำถาม คำตอบสั้น ๆ ก็คือว่ามีประเภทไม่ตรงกันระหว่างคอลัมน์ Unicode และสตริงที่ไม่ใช่ Unicode ที่คุณกำลังใช้ จากบทความ KB ดูเหมือนว่าการไม่ใส่คำนำหน้า N อาจยังคงใช้งานได้ในบางกรณี แต่จะขึ้นอยู่กับหน้ารหัสและการตั้งค่าการเรียงหน้าของฐานข้อมูล นั่นอาจอธิบายการเปลี่ยนแปลงในพฤติกรรมหากก่อนหน้านี้คุณประสบความสำเร็จด้วยวิธีการแบบไม่มีคำนำหน้า

https://support.microsoft.com/en-us/kb/239530


6

นี่แสดงว่าสตริงที่ตามมาอยู่ใน Unicode (N จริงหมายถึงชุดอักขระภาษาประจำชาติ) ซึ่งหมายความว่าคุณกำลังผ่านค่า NCHAR, NVARCHAR หรือ NTEXT ซึ่งตรงข้ามกับ CHAR, VARCHAR หรือ TEXT ดูบทความ # 2354 สำหรับการเปรียบเทียบประเภทข้อมูลเหล่านี้

โดยทั่วไปแล้ว Unicode จะใช้ในแอปพลิเคชันฐานข้อมูลที่ออกแบบมาเพื่ออำนวยความสะดวกในการใช้งานโค้ดเพจที่นอกเหนือจากเพจโค้ดภาษาอังกฤษและยุโรปตะวันตกเช่นภาษาจีน Unicode ได้รับการออกแบบเพื่อให้ชุดอักขระแบบขยายสามารถยัง "พอดี" ในคอลัมน์ฐานข้อมูล


3

ฉันคิดว่าคำนำหน้า N บอกเซิร์ฟเวอร์ sql ให้ถือว่าสตริงเป็นค่ายูนิโค้ด คอลัมน์ nvarchar เป็น Unicode ดังนั้นคุณควรใช้ไวยากรณ์นี้เมื่อเข้าถึงคอลัมน์เหล่านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.