f6c1dffdb7f4df8a66ee3c839ec35380ee8b3c3e
PostgreSQL.md
| ... | ... | @@ -121,6 +121,81 @@ |
| 121 | 121 | |
| 122 | 122 | |
| 123 | 123 | # 第二节. PostgreSQL 特性 |
| 124 | + |
|
| 125 | +### 特别注意:PostgreSQL 和 MySQL 中标识符大小写与引号使用对比 |
|
| 126 | + |
|
| 127 | +#### 1. PostgreSQL 中的处理方式 |
|
| 128 | + |
|
| 129 | +**表名和字段名大小写** |
|
| 130 | + |
|
| 131 | +- **默认行为**:PostgreSQL 在 SQL 查询时会自动将大写标识符转换为小写 |
|
| 132 | + |
|
| 133 | +- **双引号影响**:如果标识符用双引号括起来,则保留原始大小写 |
|
| 134 | + |
|
| 135 | + ```sql |
|
| 136 | + SELECT * FROM MyTable; -- 实际查询的是 mytable |
|
| 137 | + SELECT * FROM "MyTable"; -- 查询的是保留大小写的 MyTable |
|
| 138 | + ``` |
|
| 139 | + |
|
| 140 | +**引号使用** |
|
| 141 | + |
|
| 142 | +- **单引号 ('')**:用于字符串值 |
|
| 143 | +- **双引号 ("")**:用于标识符(表名、列名等) |
|
| 144 | +- **反引号 (``)**:PostgreSQL 不支持使用反引号 |
|
| 145 | + |
|
| 146 | +#### 2. MySQL 中的处理方式 |
|
| 147 | + |
|
| 148 | +**表名大小写敏感性** |
|
| 149 | + |
|
| 150 | +- **Windows 系统**:默认不区分大小写 |
|
| 151 | +- **Linux 系统**:默认区分大小写 |
|
| 152 | +- **控制参数**:`lower_case_table_names` 参数控制此行为 |
|
| 153 | + |
|
| 154 | +**列名大小写** |
|
| 155 | + |
|
| 156 | +- **所有系统**:列名不区分大小写 |
|
| 157 | + |
|
| 158 | + ```sql |
|
| 159 | + SELECT mycolumn FROM mytable; -- 与 SELECT MyColumn FROM MyTable 相同 |
|
| 160 | + ``` |
|
| 161 | + |
|
| 162 | +**引号使用** |
|
| 163 | + |
|
| 164 | +- **单引号 ('')** 和 **双引号 ("")**:都可用于字符串值 |
|
| 165 | + |
|
| 166 | +- **反引号 (``)**:用于标识符(表名、列名等),特别是在标识符与关键字冲突或包含特殊字符时 |
|
| 167 | + |
|
| 168 | + ```sql |
|
| 169 | + SELECT `select` FROM `table`; |
|
| 170 | + ``` |
|
| 171 | + |
|
| 172 | +**标识符大小写敏感性** |
|
| 173 | + |
|
| 174 | +- **未加引号的标识符**:大小写不敏感 |
|
| 175 | + |
|
| 176 | + ```sql |
|
| 177 | + UPDATE MY_TABLE SET A = 5; -- 等价于 uPDaTE my_TabLE SeT a = 5; |
|
| 178 | + ``` |
|
| 179 | + |
|
| 180 | +- **加引号的标识符**:保留大小写 |
|
| 181 | + |
|
| 182 | + ```sql |
|
| 183 | + UPDATE "my_table" SET "a" = 5; -- 必须使用相同大小写引用 |
|
| 184 | + ``` |
|
| 185 | + |
|
| 186 | +## 主要差异总结 |
|
| 187 | + |
|
| 188 | +| 特性 | PostgreSQL | MySQL | |
|
| 189 | +| -------------------- | ------------------ | ---------------------- | |
|
| 190 | +| 标识符默认大小写处理 | 大写转小写 | 取决于系统和配置 | |
|
| 191 | +| 保留大小写的方式 | 使用双引号 | 使用反引号 | |
|
| 192 | +| 字符串引号 | 仅单引号 | 单引号或双引号 | |
|
| 193 | +| 标识符引号 | 双引号 | 反引号 | |
|
| 194 | +| 列名大小写敏感性 | 取决于是否加双引号 | 所有系统都不区分大小写 | |
|
| 195 | + |
|
| 196 | + |
|
| 197 | + |
|
| 198 | + |
|
| 124 | 199 | ### 2.1 Boolean 值问题 |
| 125 | 200 | PostgreSQL 支持 `boolean` 类型,但我们引擎是使用 `char(1)` 代替 `boolean`。插入到数据的时候我们插入 `char(1)`,查询的时候返回 `boolean` 值。 |
| 126 | 201 |