PostgreSQL/MySQL能否创建名称仅大小写不同的多列?
PostgreSQL与MySQL中列名大小写区分规则
MySQL
- 列名的大小写敏感性由
lower_case_table_names系统变量和操作系统文件系统特性共同决定:- 若
lower_case_table_names=0(Linux/Unix默认配置):列名严格区分大小写,能同时创建COL和col这类仅大小写不同的列。 - 若
lower_case_table_names=1(Windows默认,也可手动设置到其他系统):MySQL会自动把所有列名转成小写存储,此时无法创建仅大小写不同的列,执行建表语句会提示“Duplicate column name 'col'”错误。 - 示例代码:
-- lower_case_table_names=0时可成功执行 CREATE TABLE test_case ( COL INT, col INT ); -- lower_case_table_names=1时执行报错 CREATE TABLE test_case ( COL INT, col INT );
- 若
PostgreSQL
- PostgreSQL默认区分列名大小写,但有个关键规则:未用双引号包裹的列名会被自动转为小写存储,所以直接写
COL和col会被识别为同一个列,导致建表失败。 - 要创建仅大小写不同的列,必须用双引号包裹每个列名,查询时也得用双引号精准匹配:
- 示例代码:
-- 错误写法:无双引号,PostgreSQL将COL和col统一转为col,报错重复 CREATE TABLE test_case ( COL INT, col INT ); -- 正确写法:用双引号包裹,成功创建区分大小写的列 CREATE TABLE test_case ( "COL" INT, "col" INT ); -- 查询时必须带双引号,否则会查询小写的col列 SELECT "COL", "col" FROM test_case;
- 示例代码:
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

