数据库表名和列名大小写问题

SQL大小写敏感性

在postgresql中表名列名会自动转换为全小写,如果想大小写混用或纯大写,必须要用双引号将表(列)名引起来。
而在oracle中,表名和列名会自动转换为大写,如果想大小写混用或纯小写,必须用双引号将表(列)名引起来。

<think>嗯,用户问的是SQL Server中列名这些标识符是否区分大小写。首先,我得回忆一下SQL Server的默认行为是怎样的。记得SQL Server的安装过程中,在设置排序规则时,默认是不区分大小写的,比如常见的SQL_Latin1_General_CP1_CI_AS,这里的CI代Case-Insensitive,也就是不区分大小写。所以默认情况下,列名这些应该是不区分的。 不过,用户可能不知道排序规则的影响,需要解释清楚。排序规则不仅影响标识符,还影响数据查询时的比较。比如,如果数据库的排序规则是区分大小写的,那么SELECT * FROM MyTableSELECT * FROM mytable会被视为不同的,可能导致错误。 接下来,可能需要说明如何查看当前数据库或实例的排序规则。可以通过查询SELECT SERVERPROPERTY('Collation')来查看服务器级的排序规则,而数据库级的则是使用DATABASEPROPERTYEX('数据库', 'Collation')。这样用户就能自己检查了。 另外,用户可能会混淆实例级数据库级的排序规则设置。需要指出,虽然实例级的排序规则是默认的,但每个数据库可以有自己的排序规则,创建时也可以指定不同的。如果数据库的排序规则是区分大小写的,那么里面的标识符就会区分大小写。 还有,临时的排序规则可能依赖于tempdb数据库的设置,这点也需要提到,避免用户在使用临时时遇到意外的问题。 然后,用户可能想知道如何修改排序规则。不过修改现有数据库的排序规则比较复杂,可能需要重建数据库或者导出导入数据,所以应该提醒用户谨慎操作,并建议在创建数据库时明确指定所需的排序规则。 可能还需要举例子说明在不同排序规则下的行为差异,比如在区分大小写的情况下,查询不同的会导致错误,而在不区分的情况下则可以正常执行。同时,变量的处理是否受影响?记得在SQL Server中,变量是不区分大小写的,无论排序规则如何,这点需要特别指出,避免混淆。 最后,总结一下,回答应该分点说明,先讲默认情况,再讲如何查看修改排序规则,然后提到临时变量的特殊情况,最后给出建议。这样结构清晰,用户能一步步理解。</think>在 SQL Server 中,标识符(如列名)是否区分大小写取决于 **数据库或实例的排序规则(Collation)设置**。以下是逐步分析: --- ### 1. **默认行为** SQL Server 的默认排序规则是 `SQL_Latin1_General_CP1_CI_AS`,其中: - `CI` 示 **Case-Insensitive**(不区分大小写) - `AS` 示 **Accent-Sensitive**(区分重音) **默认情况下**,标识符(如列名)**不区分大小写**。例如: ```sql SELECT * FROM MyTable; -- 等同于 SELECT * FROM MYTABLE; -- 等同于 SELECT * FROM mytable; ``` --- ### 2. **修改排序规则的影响** 如果数据库或实例的排序规则包含 `CS`(Case-Sensitive,区分大小写),则标识符会区分大小写。例如: - `Latin1_General_CS_AS` 示区分大小写。 **此时以下查询会报错**: ```sql CREATE TABLE MyTable (ID INT); -- 创建 MyTable SELECT * FROM mytable; -- 报错:对象 "mytable" 无效 ``` --- ### 3. **如何验证当前设置** - **查看实例级默认排序规则**: ```sql SELECT SERVERPROPERTY('Collation') AS ServerCollation; ``` - **查看数据库级排序规则**: ```sql SELECT DATABASEPROPERTYEX('YourDatabaseName', 'Collation') AS DBCollation; ``` --- ### 4. **标识符的额外规则** - **引号包裹的标识符**:如果用双引号 `"` 或方括号 `[]` 包裹标识符,则严格按称匹配(即使排序规则不区分大小写)。 ```sql CREATE TABLE "MyTable" (ID INT); -- 必须用 "MyTable" 引用 SELECT * FROM "MyTable"; ``` --- ### 5. **临时的特殊行为** 临时的元数据继承自 `tempdb` 数据库的排序规则。若 `tempdb` 是区分大小写的,则临时也区分大小写。 --- ### 6. **变量关键字** - **变量始终不区分大小写**(无论排序规则如何): ```sql DECLARE @Var INT; SET @var = 10; -- 合法操作 ``` - **SQL 关键字不区分大小写**: ```sql SELECT * FROM Table; -- 等同于 select * from table; ``` --- ### 总结 | 场景 | 是否区分大小写? | |-----------------------|----------------------------------| | 默认排序规则 (`CI`) | 否 | | 显式设置为 `CS` 排序规则 | 是 | | 引号包裹的标识符 | 是 | | 临时 | 取决于 `tempdb` 的排序规则 | | 变量 | 否 | **建议**:在设计数据库时,尽量保持标识符大小写一致,并通过排序规则显式控制行为,避免依赖默认设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值