【问题标题】:Stored procedure for MySQL to convert bigint to UUIDMySQL 将 bigint 转换为 UUID 的存储过程
【发布时间】: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


【解决方案1】:

事实证明这个过程没有问题,问题在于线程堆栈配置。

您可以通过在 my.cnf 中增加 thread_stack 大小来增加它:

thread_stack = 256K

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 2021-08-17
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2020-09-28
    相关资源
    最近更新 更多