我不断从MSSQL服务器中得到意想不到的行为,我无法解释。
实施例: 请求
"""select * from vernacularname where (vernacularname = N'ᐱᓯᐢᑭᐤ')"""
返回正确的结果(id,vernacularname,language)
1 ᐱᓯᐢᑭᐤ cr
还有一些其他unicode名称,我不知道它们是如何连接的,例如:
1 ܚܝܘܬܐ None
1 ᓂᕐᔪᑦ iu
1 እንስሳ ti
5 ፈንገስ am
6 ᐱᕈᖅᑐᖅ iu
6 ᐅᐲᑭᒋᑳᓇ cr
6 ގަސް dv
212 ᐱᔦᓰᐢ cr
212 ᏥᏍᏆ None
212 ወፍ am
212 བྱ། bo
216 None
216 ሓሽራ ti
359 འུ་འཐུང་སྲོག་ཆགས། bo
359 ጡት አጥቢ am
359 ᐱᓱᒃᑎ iu
360 རྟ་བླ། bo
459 ᎠᏓᏢᎢᎯ None
我使用python2.6.5和pyodbc发送查询。 (pymssql根本没有处理unicode查询)
任何关于出了什么问题的线索都表示赞赏。 非常感谢你!
了Christoph
答案 0 :(得分:3)
通过在Latin1_General_BIN
条件中添加COLLATE
来指定WHERE
归类,以强制使用二进制归类比较unicode值:
select *
from vernacularname
where (vernacularname COLLATE Latin1_General_BIN = N'ᐱᓯᐢᑭᐤ')
这是SQL Server处理WHERE
子句条件比较的结果,它不是python或pyodbc特有的。我们可以通过查看original和updated查询之间的结果差异来证明SQL Server是罪魁祸首。
有关更详细的说明,请参阅Bart Duncan's reply here。