MySQL截断命令 - unicode字符

时间:2010-02-03 16:12:38

标签: sql mysql database text-processing

我目前正在尝试调整MySQL中存储在表中的值。存储的值包含一系列Unicode字符。我需要截断到40个字节的存储空间,但是当我尝试:

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

MySQL非常有用并且保留了40个字符,而不是40个字节。有办法解决这个问题吗?

关心并感谢,

gaioshin

2 个答案:

答案 0 :(得分:3)

我不太确定你是否真的要截断到40个字节。

因为你可以搞乱unicode字符,所以条件应该是 “最后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 ;

答案 1 :(得分:0)

LEFT是字节安全的。

如何修改列数据类型,使其只能容纳40个字节。 MySQL会自动为你截断。

ALTER TABLE table_name
  MODIFY column_name column_type_40_bytes;