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