You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中实现字符串的大小写敏感绝对比较?

解决SQL Server字符串大小写敏感匹配问题

问题根源

SQL Server默认使用的排序规则(比如SQL_Latin1_General_CP1_CI_AS)是**不区分大小写(CI)**的,所以查询时会把"Abc"和"abc"判定为相等,无法实现你要的绝对匹配。

解决方案

方案1:查询时指定区分大小写的排序规则(推荐,不影响现有业务)

在UserName的比较条件后加上COLLATE SQL_Latin1_General_CP1_CS_AS,强制区分大小写。同时必须改用参数化查询,避免SQL注入风险(你的原代码直接拼接字符串存在严重安全隐患)。

修改后的VB代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Usr As String = TextBox1.Text.Trim
    Dim Pwd As String = TextBox2.Text.Trim
    Dim i As Integer

    ' 使用参数化查询,同时指定区分大小写的排序规则
    user_stmt = "Select Count(*) from UserTable where UserName = @Usr COLLATE SQL_Latin1_General_CP1_CS_AS and Password = @Pwd"

    User_Cmd = New SqlCommand(user_stmt, con)
    ' 添加参数,避免SQL注入
    User_Cmd.Parameters.AddWithValue("@Usr", Usr)
    User_Cmd.Parameters.AddWithValue("@Pwd", Pwd)

    con.Open()
    i = CInt(User_Cmd.ExecuteScalar())
    con.Close() ' 记得关闭连接,也可以用Using语句自动释放资源

    If i = 1 Then
        MsgBox("Found")
    Else
        MsgBox("Exit")
    End If
End Sub

方案2:修改字段的排序规则(需谨慎评估)

如果你的业务全局需要UserName区分大小写,可以直接修改UserTable中UserName字段的排序规则为区分大小写的类型:

ALTER TABLE UserTable
ALTER COLUMN UserName VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL;

注意:修改字段排序规则会锁表,且可能影响依赖该字段的其他查询,操作前务必备份数据并评估业务影响。

额外提醒

永远不要直接拼接用户输入到SQL语句中,这会导致SQL注入攻击,参数化查询是必须的安全实践。

内容的提问来源于stack exchange,提问作者MGC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:48:32