SQL Server 的大小写设置有点门道,不是改个名字那么简单。你要是碰上数据需要严格区分大小写的场景,比如账号密码这种,那就得动点手脚。常用的几种方法我都整理了一下,基本从字段级、表级到数据库级都有,灵活用还挺方便的。
字段级设置是最灵活的,直接上 COLLATE
就行:
ALTER TABLE tb
ALTER COLUMN colname NVARCHAR(100) COLLATE Chinese_PRC_CS_AS
这样你可以单独让某个字段区分大小写,别的字段不动,比较适合老系统里小范围优化。
表级/库级设置就比较一刀切了,整个表或者数据库都按新规则走。比如:
ALTER DATABASE dbname COLLATE Chinese_PRC_CS_AS
数据库建的时候也能直接指定,省得之后改来改去。
有时候你看似写对了 SQL,但查出来的数据总对不上,十有八九是大小写的问题,尤其是跟别的系统对接时,写个'Admin'
和'admin'
,一不小心就匹配不到。
哦对了,这事不只是 SQL Server 会遇到,MySQL、SQL、甚至MATLAB、PLSQL 都有自己的方式,记得按环境来选。
建议你写数据库字段的时候,提前统一规范,比如全小写,全用CS_AS
,后期少踩坑。要是已经上线了,就别大改,用字段级COLLATE
改局部,比较稳。
如果你项目里涉及多语言或用户录入的大小写敏感内容,一定要考虑清楚数据的COLLATION
规则,后期起来可麻烦了。