gpt4 book ai didi

mysql - 在 MySQL 中将转义的 UTF-16(JSON 实体)转换回正常的 UTF-8

转载 作者:行者123 更新时间:2023-11-30 23:32:06 25 4
gpt4 key购买 nike

我如何转换这样的数据

\u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d

回到 MySQL 中的正常 UTF8?有可能吗?

最佳答案

您可以通过读取二进制数据并将其转换为目标字符集来在 mysql 中的字符集之间进行转换,就像这样(如果您有一个名为 example 的表和一个名为 data:

UPDATE `example` SET data=CONVERT(CONVERT(`data` USING binary) USING utf8);

JSON\uXXXX 实体采用十六进制 UTF-16 编码,因此如果您有支持 utf-16 的 mysql 版本,则可以将它们转换为 utf-8。下面的函数向您展示了如何做到这一点。首先,你 unhex() 这些值,然后从 UTF-16 转换为 UTF-8:

DELIMITER @@
CREATE FUNCTION Unjson (instring TEXT CHARACTER SET utf8)
RETURNS TEXT CHARACTER SET utf8
BEGIN

DECLARE i INT DEFAULT 0;
DECLARE c VARCHAR(1);
DECLARE utfstr TEXT CHARACTER SET utf16 DEFAULT "";
DECLARE outstring TEXT CHARACTER SET utf8 DEFAULT "";

WHILE i < CHAR_LENGTH(instring) DO
SET i = i + 1;
SET c = SUBSTRING(instring, i, 1);
IF c = "\\" THEN
SET c = SUBSTRING(instring, i + 1, 1);
IF c = "u" THEN
SET utfstr = CONCAT(utfstr, UNHEX(SUBSTRING(instring, i + 2, 4)));
SET i = i + 5;
END IF;
ELSE
IF utfstr != "" THEN
SET outstring = CONCAT(outstring, CONVERT(utfstr USING utf8));
SET utfstr = "";
END IF;
SET outstring = CONCAT(outstring, c);
END IF;
END WHILE;
IF utfstr != "" THEN
SET outstring = CONCAT(outstring, CONVERT(utfstr USING utf8));
END IF;

RETURN outstring;
END@@
DELIMITER ;

有了这个 MySQL 函数,您可以使用以下方法转换您的表:

UPDATE `table_name` SET `column_name`=Unjson(`column_name`);

我正在使用 MySQL 5.5,但我认为 5.0 不支持 utf-16,因此您可能需要检查您的 MySQL 版本...

(是的,我建议您在生产环境中运行它之前进行备份...);)

关于mysql - 在 MySQL 中将转义的 UTF-16(JSON 实体)转换回正常的 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com