注册
大小写敏感对比
技术分享/ 文章详情 /

大小写敏感对比

harrison辉 2025/07/11 68 0 0

—oracle
对象名(表名、列名等)默认不区分大小写
Oracle 默认把未加双引号的对象名全部转为大写处理。
字符串比较是大小写敏感的
SELECT * FROM users WHERE name = ‘admin’; – 只匹配 ‘admin’

—mysql
表名是否大小写敏感?由操作系统 + 参数 lower_case_table_names 共同决定。
操作系统 lower_case_table_names 值 表名是否大小写敏感? 说明
Linux 0(默认) ✅ 敏感 表名区分大小写
Windows 1(默认) ❌ 不敏感 表名不区分大小写
通用 2 ❌ 不敏感 表名在磁盘存储为小写,但 SQL 可大小写混写访问

  1. 设置成0:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时大小写敏感。
    例如:代码里访问select * from ACT_EVT_LOG;执行的时候就是访问ACT_EVT_LOG这张表。
    代码里访问select * from act_evt_log;执行的时候就是访问act_evt_log这张表。
  2. 设置成1:表名转小写后存储到硬盘,比较时大小写不敏感。
    例如:代码里访问select * from ACT_EVT_LOG;或者select * from act_evt_log;执行的时候都是访问act_evt_log这张表。
  3. 设置成2:表名按你写的SQL大小写存储,大写就大写小写就小写,比较时统一转小写比较。
    例如:代码里访问select * from ACT_EVT_LOG;执行的时候就是访问act_evt_log这张表。

1、列名是否大小写敏感?
无论在哪种系统中,列名默认都是不区分大小写的

2、别名是否大小写敏感?
列别名/表别名:在 SQL 使用中不敏感,但在 ORDER BY / GROUP BY 等上下文中通常保持一致比较好。

3、字符串比较是否大小写敏感?
取决于 字符集和排序规则(collation)。
utf8_general_ci:ci 表示 case-insensitive(不敏感)
utf8_bin:表示 二进制比较,大小写敏感

lower_case_table_names = 0; (默认为0)
数据库名与表名是严格区分大小写的;
表的别名是严格区分大小写的;
列名与列的别名在所有的情况下均是忽略大小写的;
变量名也是严格区分大小写的;

—达梦
CASE_SENSITIVE有 0 和 1 两个值,分别代表不同含义。
CASE_SENSITIVE = 1 代表数据库对大小写敏感,会将A和a当成两个不同的字符对待,初始化数据库时,如不指定CASE_SENSITIVE值,默认为 1,数据库大小写敏感。

CASE_SENSITIVE = 0 大表数据库对大小写不敏感,会将A和a看作是相同的字符。

另外,在使用disql查询工具进行查询时,默认会将小写转为大写。

对象名(表名、列名)是否大小写敏感?
🔸 默认情况(不加双引号)→ 不敏感
• 达梦默认会将未加双引号的对象名统一转换为大写存储。
• 所以访问时大小写不敏感。
• 通过 dbms_metadata.get_ddl查询表结构时,大小写敏感库对表名大小写有要求

总结:

mysql默认lower_case_table_names = 0参数下:

数据库名与表名是严格区分大小写的;
表的别名是严格区分大小写的;
列名与列的别名在所有的情况下均是忽略大小写的;
变量名也是严格区分大小写的;
字符串默认不敏感,即select查询大小写都会出现在结果集中

oracle默认参数下:

对象名(表名、列名等)默认不区分大小写
字符串比较是大小写敏感的
PL/SQL 中变量名、标识符不区分大小写

达梦默认参数下:

对象名(表名、列名等)默认不区分大小写
字符串比较时是默认区分大小写的,大小写敏感的
PL/SQL 中变量名、标识符不区分大小写

建议

从 Oracle 系统迁移 (大小写敏感)
从 MySQL / SQL Server 系统迁移 N(大小写不敏感)

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服