一、前提:之前第一次用PostgreSQL,浅浅地记录一下

二、表名大小写问题

1.MySQL中(通常情况下库表表名都是小写(原因请自行百度)

①lower_case_file_system是只读属性,由你的操作系统的文件系统决定;当你的操作系统Windows系统时,通常为ON(大小写不敏感),当你的操作系统为Unix时,通常为OFF(大小写敏感)

②只有当lower_case_file_system为OFF时,lower_case_table_names才是有用的,通过设置为0表示不同大小写代表不同的表,为1表示不同大小写相同的表;当lower_case_file_system为ON时,lower_case_table_names是没有用的

2.PostgreSQL中

①PostgreSQL是大小写敏感的,当你创建的表名包含大写字母时,他会将其转换为小写字母的表名

②如果你想创建大写字母的表名,用双引号包起来,如下

CREATE TABLE "AAA" (
    ID VARCHAR(255) NOT NULL
);

三、列名大小写问题

1.MySQL中(windows下,linux同上面的表名)

①mysql中列名是大小写不敏感的,但是他并不会将大小写进行转换,如下图名称依然是大写的ID,并不会自动转换为小写,但是你如果想添加id字段是不可以的

M67[R$MH%0%FF$YB1~P$F~F.png

2.PostgreSQL中

①PostgreSQL中列名和表名一样是大小写敏感,他会将其转换为小写字母;如果你想创建大写字母的列表,请用双引号包裹即可

<code loading=GBRQ$4@1V]UB89UQY%GXE.png" title="GBRQ$4@1V]UB89UQY%GXE.png">

四、引申一下,既然提到了表名、列名,那么数据的大小写又会对我们产生什么影响呢?

1.mysql中varchar类型的数据不区分大小写问题(默认唯一字段也不区分大小写,无法插入大小写不同的数据,但可以设置达到效果)

2.这里我们不设置唯一索引,表中数据如下

XX9TKDUQA4U$AZ`0~51YK8L.png

①直接查询结果和去重查询结果如下

B0A04LQ29)K4LVMTEU1O6QS.png

3.如何才能查询出想要的数据呢?

①解决方案1:查询时加入大小写敏感

1.SELECT * FROM student WHERE BINARY name=“ZhangSan”
2.SELECT * FROM student WHERE name= BINARY “ZhangSan”
注:由于该字段创建索引时可能是大小写不敏感的,因此这样查询时经常会无法使用索引

②解决方案2:定义表结构时定义大小写敏感

1.name varchar(64) BINARY NOT NULL
注:这样定义时该字段生成的索引也是区分大小写的

③解决方案3:设置collate关键字为utf8mb4_general_bin

1.show create table <tablename>中可以看到
collate关键字,默认值是utf8_unicode_ci,其中ci表示case ingore即忽略大小写
2.该字段会影响字符类型比较排序,如group by,having,索引的创建

五、创建主键自增的方式

1.MySQL中

① AUTO_INCREMENT实现,内部维护了一个计数器

2.PostgreSQL中(底层用序列实现,有符号位32位存储)

①SERIAL数据类型

VRGYP}U96SG2%2G[0I@U2TB.png

②使用指定序列实现

CREATE SEQUENCE example_sequence START 1;
CREATE TABLE example_table (
    id INTEGER DEFAULT NEXTVAL('example_sequence') PRIMARY KEY,
    name VARCHAR(100)
);

③从PostgreSQL10版本开始,引入了IDENTITY列

CREATE TABLE example_table (
    id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    name VARCHAR(100)
);

六、时间类型

1.MySQL中

DATE: 这个数据类型存储日期。它以'YYYY-MM-DD'的格式存储日期,不包含时间部分。

DATETIME: 存储日期和时间。它以'YYYY-MM-DD HH:MM:SS'的格式存储日期和时间。

TIME - 时间,不带日期信息,以HH:MM:SS的格式存储时间

TIMESTAMP: 也存储日期和时间,表示为时间戳(这里的时间戳只能以1970年开始的时间)

image.png

2.PostgreSQL中

DATE: 在PostgreSQL中,与MySQL类似,DATE数据类型存储日期,以'YYYY-MM-DD'的格式存储日期,不包含时间部分

TIME - 时间,不带日期信息,以HH:MM:SS的格式存储时间

TIMESTAMP - 日期和时间信息(任意时间都可以)

有写的不好的地方,请多多见谅!


原来是小袁呐
1 声望0 粉丝