【发布时间】:2013-10-24 22:34:57
【问题描述】:
我正在尝试将旧版 bigint 字段转换为 uuid 序列:
DELIMITER |
CREATE FUNCTION uuid_from_bigint(b bigint) RETURNS CHAR(36) BEGIN
DECLARE hex CHAR(32);
SET hex = lpad(hex(b), 32, '0');
RETURN CONCAT(LEFT(hex, 8), '-', MID(hex, 9,4), '-', MID(hex, 13,4), '-', MID(hex, 17,4), '-', RIGHT(hex, 12));
END
|
DELIMITER ;
有人可以帮我理解为什么这会导致以下问题吗?
mysql> select uuid_from_bigint(9);
ERROR 1436 (HY000): Thread stack overrun: 12816 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.
【问题讨论】:
-
注意,我最终计划将其扩展为下部和上部采用两个 bigint — 但我无法通过第一个障碍。
-
尝试把你的函数改成
CREATE FUNCTION uuid_from_bigint(b bigint) RETURNS CHAR(36) BEGIN DECLARE hex CHAR(32); DECLARE tmp CHAR(36); SET hex = lpad(hex(b), 32, '0'); set tmp = CONCAT(LEFT(hex, 8), '-'); set tmp = CONCAT(tmp, MID(hex, 9,4)); set tmp = CONCAT(tmp, '-'); set tmp = CONCAT(tmp, MID(hex, 13,4)); set tmp = CONCAT(tmp, '-'); set tmp = CONCAT(tmp, MID(hex, 17,4)); set tmp = CONCAT(tmp, '-'); set tmp = CONCAT(tmp, RIGHT(hex, 12)); return tmp; END并测试问题是否仍然存在 -
这无济于事,但您的功能在我的服务器上运行。你应该读这个(它让我头晕:))stackoverflow.com/questions/8821575/…
标签: mysql sql stored-procedures uuid