如何使SQL区分大小写

4

我在一个域名托管服务上设置了一个Access数据库,通过SQL连接到它。然而,我需要所有的查询都区分大小写,据我所知,域名托管服务上的服务器没有区分大小写。是否有某个命令可以在我的SQL中使用,使查询区分大小写?


1
你可以在这个相关但不是重复的问题中找到灵感:https://dev59.com/znVC5IYBdhLWcg3w4Vb6 - Bob Kaufman
你正在使用什麼數據庫引擎? - Lamak
@BobKaufman 谢谢,我在问这个问题之前已经看过这个问题了。 - futurevilla216
@Lamak 我相信我正在使用微软数据库引擎。 - futurevilla216
然后,您可以借鉴@Niklas的答案,但是您可以将整个数据库的默认排序规则设置为区分大小写。 Latin1_General_CS_AS 是一个示例。 - Lamak
那么我该如何使默认排序区分大小写呢? - futurevilla216
2个回答

5

您是否需要将整个数据库设置为区分大小写,还是仅对某些查询部分进行设置。如果是查询条件,则可以使用以下方法强制匹配区分大小写:

StrComp("A","a",0)

方法签名中的 0 是为了执行二进制比较,从而获得您想要的大小写敏感性。它返回一个整数。

WHERE StrComp('myText1', 'MYTeXt1', 0) = 0

Documentation


我需要我的整个数据库区分大小写。 - futurevilla216
当我尝试使用 WHERE ASC(text1) = ASC(text2) 时,出现了无效的过程调用。对于您建议的第一个方法,它是如何工作的?我只需要键入 WHERE StrComp('myText1','MYTeXt1') 吗? - futurevilla216
我刚试了一下,结果和ASC一样。如果我要将其与整个字段进行比较,应该如何使用StrComp?从技术上讲,它不是一个字符串。 - futurevilla216

3
我认为你可以在WHERE子句之后添加COLLATE。
SELECT col FROM table  
WHERE col COLLATE Latin1_General_CS_AS = 'value'

我刚试了一下,但是出现了语法错误。我似乎漏掉了某个运算符。这是我的SQL语句:SELECT * FROM table WHERE username='username' AND password COLLATE password='password'我哪里做错了? - futurevilla216
没关系,我犯了一个错误 :) 现在,我的代码是 SELECT * FROM table WHERE username COLLATE Latin1_General_CS_AS = 'username' AND password COLLATE Latin1_General_CS_AS = 'password'。但我仍然得到语法错误(缺少运算符)。 - futurevilla216
@Niklas,我之前已经接受了它,可能是不小心取消了。抱歉。 - futurevilla216
如果您将collate放在最后会发生什么?SELECT * FROM table WHERE username = 'username' COLLATE Latin1_General_CS_AS - Niklas
从评论链中可以看出,尽管@futurevilla216将其标记为被接受的答案,但这个答案显然从未起作用。为了明确未来读者,对于MS Access(Jet/ACE)数据库,此答案不正确。COLLATE不是MS Access查询的有效SQL关键字。 - C Perkins
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接