mysql 8 更新了 uuid 函数,所以我想把 id 的值设为 uuid ,是否建表 id char(36) 就可以了?

2023-12-20 21:18:07 +08:00
 bronana
CREATE TABLE color ( 
  id CHAR ( 36 ) PRIMARY KEY NOT NULL, 
  name VARCHAR ( 40 ) NOT NULL
);

INSERT INTO color
VALUES
	( UUID(), 'blue' );

-- select uuid() -- f5601d25-9f36-11ee-b57e-0242ac130002

我打印(select uuid(),发现是 36 个字符)

于是用的 id char(36),是不是这样建表的呢?

插入也需要手动调用 uuid() 方法吗?

2369 次点击
所在节点    MySQL
13 条回复
littlewing
2023-12-20 21:54:03 +08:00
varchar 多少都无所谓,反正是可变的
littlewing
2023-12-20 21:54:45 +08:00
@littlewing 看错了,用 char 的话,应该 36 就够了
thinkershare
2023-12-20 21:59:03 +08:00
CHAR(36 ),我们一般也是用这个类型,不过 id 并不在程序中 uuid(), 如果用 uuid()函数来生成,那和使用 int/long 就没啥差别了。一般都是在程序中生成。你这样做也没啥问题。内置的 uuid 生成的也是有序的,如果在程序中生成,也要注意生成值需要自动增长。
Maboroshii
2023-12-21 00:11:30 +08:00
uuid 本身只有 128 位,如果为了存储效率,应该用二进制存吧?
adoal
2023-12-21 00:21:56 +08:00
不懂 MySQL…只知道 PG 里有原生的 UUID 类型,就是 16 字节的。不过见过好几例在 PG 里用 char(32)或者 char(36)的,不知道说啥好。
chendy
2023-12-21 08:04:33 +08:00
除非压力很大否则不如直接自增…
xuanbg
2023-12-21 08:18:20 +08:00
这个用法真不如自增
coderzhangsan
2023-12-21 09:48:52 +08:00
uuid 另用字段存储,id 还是保留自增,如果设置 uuid 为主键,mysql 页存储分割会不连续。
cheng6563
2023-12-21 09:56:37 +08:00
你知道雪花算法之类的东西产生的原因么。。
astkaasa
2023-12-21 13:34:50 +08:00
astkaasa
2023-12-21 13:35:05 +08:00
lancelee01
2023-12-21 15:49:46 +08:00
主键太长了,影响存储、二级索引大小,进而影响性能。一般生产上主键都是 8 字节的。当然如果数据量非常小当我没说。
bthulu
2023-12-21 16:17:19 +08:00
用 uuid, 一般只有在需要在数据插入表之前就知道主键是多少的情况下才会用到这个. 这种情况下主键是由程序生成, 跟 mysql 关系就不大了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1002094

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX