генерировать идентификаторы mysql в виде строки вместо целого числа - PullRequest
0 голосов
/ 01 декабря 2010

Я уверен, что это называется чем-то, чье имя я не знаю.

Я хочу генерировать идентификаторы, такие как:

59AA307E-94C8-47D1-AA50-AAA7500F5B54 

вместо стандартного числа с автоматическим увеличением.

Это не обязательно должно быть именно так, но для него нужно длинное уникальное строковое значение.

Есть ли простой способ сделать это?

IЯ хочу сделать это для ссылки на вложения, чтобы их было нелегко использовать, например, attachment = 1

Я знаю, что есть способы обойти это, но я думаю, что строковый идентификатор будет лучше, если это возможно, и я уверен, что япросто не ищу нужную вещь.

Спасибо

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

В прошлый раз, когда я проверял, вы не можете указать UUID () в качестве ограничения по умолчанию для столбца в MySQL. Это означает использование триггера:

CREATE TRIGGER
newid
BEFORE INSERT ON your_table_name
FOR EACH ROW
SET NEW.id = UUID()

Я знаю, что есть способы обойти это, но я думаю, что строковый идентификатор будет лучше

Я понимаю, что вы за охраной скрываете безопасность, но учтите, что столбцы CHAR / VARCHAR, длина которых превышает 4 символа, занимают больше места, чем INT (1 байт). Это повлияет на производительность в поиске и соединениях.

0 голосов
/ 01 декабря 2010

Вы всегда можете просто передать обычные значения auto_increment через SHA1 () или MD5 (), когда придет время отправить их в «public». С приличной солевой строкой до / после значения идентификатора было бы почти невозможно угадать, каково было исходное число. Вы не получите необычно выглядящую строку, такую ​​как UUID, но у вас все равно будет обычное целочисленное значение ID, чтобы иметь дело с внутренним.

Если вас беспокоит дополнительное время процессора, необходимое для многократного хэширования столбца, вы всегда можете сохранить значение хеш-функции в отдельном поле при создании записи.

...