2010-02-03 4 views
2

현재 MySQL의 테이블에 저장된 값을 조정하려고합니다. 저장된 값에는 일련의 유니 코드 문자가 포함됩니다. 나는 스토리지의 가치가 40 바이트로 절단해야하지만 내가하려고하면MySQL truncation 명령 - 유니 코드 문자

UPDATE `MYTABLE` SET `MYCOLUMN` = LEFT(`MYCOLUMN`, 40); 

MySQL은 지나치게 도움이됩니다 40 개 문자보다는 40 바이트을 유지합니다. 이 문제를 해결할 방법이 있습니까?

답변

3

정확하게 정확히 40 바이트로 자르려면 잘 모르겠습니다.

유니 코드 문자가 엉망이 될 수 있으므로 조건은 이어야하며 마지막 문자는 여전히 유효합니다 (최대 40 바이트).

나는 그것에 대한 저장 함수를 작성합니다. 나는 그것이 작동하는지 모르겠지만, 내 생각에, 당신은 내 표류를 잡는다. :

DELIMITER &&& 
CREATE FUNCTION MYTRUNCATE (subject VARCHAR(255) CHARACTER SET utf8, max_bytes INT UNSIGNED) 
RETURNS VARCHAR(255) CHARACTER SET utf8 
DETERMINISTIC 
BEGIN 
DECLARE byte_len INT; 
DECLARE char_len INT; 
DECLARE res VARCHAR(255) CHARACTER SET utf8; 
SET res = LEFT(subject, max_bytes); 
SET byte_len = BIT_LENGTH(res)/8; 
SET char_len = CHAR_LENGTH(res); 
WHILE byte_len > max_bytes DO 
SET char_len = char_len - 1; 
SET res = LEFT(res, char_len); 
SET byte_len = BIT_LENGTH(res)/8; 
END WHILE; 
RETURN res; 
END&&& 
DELIMITER ; 
+0

정확한 해결책을 찾고 있습니다. 바로 아이디어를 얻고 싶습니다 . – uuid0

+0

"CHARACTER SET utf8"을 사용중인 문자로 조정하십시오. – uuid0

+0

멋진 멋지다. - 그냥 사용하고 잘 작동하는 것 같습니다 - 감사합니다! – Gaioshin

0

LEFT를 gaioshin

감사합니다 덕분에,

바이트 안전합니다.

40 바이트 만 저장할 수 있도록 열 데이터 유형을 수정하는 방법은 어떻습니까? MySQL은 자동으로자를 것이다.

ALTER TABLE table_name 
    MODIFY column_name column_type_40_bytes; 
+0

정의를 변경했지만 불행히도 그것은 작동하지 않는다. 그리고 나는 MySQL을 정의하도록 강제 할 수있는 방법을 찾지 못하는 것 같다. 40 문자가 아닌 40 바이트로 표현 : – Gaioshin