odan / tsid
生成时间可排序标识符 (TSID) 的库。
0.1.0
2022-12-09 08:51 UTC
Requires
- php: ^8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3
- phpstan/phpstan: ^1
- phpunit/phpunit: ^9 || ^10
- squizlabs/php_codesniffer: ^3
README
描述
生成时间可排序标识符 (TSID) 的库。
此库是从 Java 转移到 PHP 的 TSID Creator 的移植。
需求
- PHP 8.0+
安装
composer require odan/tsid
使用方法
use Odan\Tsid\TsidFactory; $tsidFactory = new TsidFactory(); $tsid = $tsidFactory->generate(); // 388400145978465528 echo $tsid->toInt(); // 0ARYZVZXW377R echo $tsid->toString();
数据库使用
MySQL
将 (主/副) 键的数据类型设置为 bigint(20) unsigned
。
示例
CREATE TABLE `users` ( `id` bigint(20) unsigned NOT NULL, `username` varchar(45) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB
注意: 当你使用 BIGINT(20)
时,最大值是 2^63 - 1 == 9223372036854775807
。这意味着仍有足够的空间来存储任何 TSID。当你使用 BIGINT(20) unsigned
时,最大值是:2^64-1 = 18446744073709551615
SQLite
将 (主/副) 键的数据类型设置为 INTEGER
。
CREATE TABLE users (id INTEGER PRIMARY KEY, username TEXT);
注意: SQLite 使用 8 字节 有符号 整数来存储整数。因此,最大正整数值是 2^63 - 1 == 9223372036854775807
。这意味着仍有足够的空间来存储任何 TSID。
数据类型比较
TSID max: 18446744073709551615
TSID 2023-01-01T00:00:00.000Z: 397177100698290050
TSID 2038-01-19T03:14:07.000Z: 2389272048961164191
TSID 2999-12-31T23:59:59.999Z: 7015104302283010234
PHP_INT_MAX: 9223372036854775807
SQLite INTEGER max: 9223372036854775807
MySQL BIGINT(20) max: 9223372036854775807
MySQL BIGINT(20) unsigned max: 18446744073709551615
阅读更多
- https://vladmihalcea.com/uuid-database-primary-key/
- https://github.com/f4b6a3/tsid-creator
- UUID 版本 7 具有时间顺序值字段。
- ULID 是具有时间戳和随机位的 128 位数字。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。