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