2017-04-19 10 views
1

데이터베이스에 새 항목을 삽입 할 때마다 약 300 + + 임의의 영숫자 문자열을 자동 생성하도록 데이터베이스 열을 허용하려고합니다. 아래 코드는 36 크기 만 가능합니다.거대한 MySQL 무작위 영숫자 문자열

DELIMITER ;; 
CREATE TRIGGER testdata 
BEFORE INSERT ON testdata 
FOR EACH ROW 
BEGIN 
    IF new.token IS NULL THEN 
    SET new.token = uuid(); 
    END IF; 
END 
;; 

누구나이 질문에 답변 해 주셔서 감사합니다.

+0

이 문자열의 목적은 무엇입니까? 영숫자 시퀀스를 생성하는 기법이 있습니다 (http://stackoverflow.com/questions/16737910/generating-a-random-unique-8-character-string-using-mysql). 그러나 암호 학적으로 고유 한 것이 필요한 경우 말할 것도없고,'RAND()'는 너무 예측 가능합니다. – tadman

+0

안녕하세요. @ tadman 답장을 보내 주셔서 감사합니다. 이 문자열의 목적은 일종의 인증과 같습니다. 마음은 나를 위해 어떤 더 나은 방법을 제안하는 crytographically 독특한 무엇입니까? –

+0

UUID 유형 값은 실제로는 예측할 수 없으며 고유해야합니다. 암호 학적으로 고유 한 무언가를 얻으려면 보안 난수 생성기가 필요하다. 그런 다음이를 base-62 또는 그 종류의 것으로 인코딩해야한다. 이것은 MySQL이 처리 할 수있는 최선의 방법은 아니지만 시도해 볼 수는 있습니다. 외부 프로그래밍 언어로하는 것이 훨씬 쉽습니다. – tadman

답변

1

하나의 옵션은 그냥 그들이 불필요이기 때문에 UUID를에서 하이픈을 제거하고 방법으로 많은 일을하지 않는 것이 여기

DELIMITER ;; 
CREATE TRIGGER testdata 
BEFORE INSERT ON testdata 
FOR EACH ROW 
BEGIN 
    IF new.token IS NULL THEN 
     SET new.token = CONCAT(REPLACE(uuid(), '-', ''), REPLACE(uuid(), '-', ''), ...) 
    END IF; 
END 
;; 

주 즉, 함께 체인 uuid() 여러 번 호출의 출력하는 것 문자열을 더 랜덤하게 만드는 것.

+0

안녕하세요. @TimBiegeleisen 귀하의 답변에 감사드립니다. 그것은 내가 원하는대로 일하고있다. –