在MySQL中转换PHP json_编码UTF8十六进制实体

在MySQL中转换PHP json_编码UTF8十六进制实体,php,mysql,json,Php,Mysql,Json,在php中,json\u encode()将UTF8编码为十六进制实体,例如 json_encode('中'); // become "\u4e2d" 假设数据“\u4e2d”现在存储在MySQL中,是否可以从“\u4e2d”转换回中不使用PHP,只使用纯MySQL?在我的配置中,选择hex('中'); 返回E4B8AD 这是UTF8字节的十六进制代码。自然 与代码点4e2d的十六进制不同,但您可以 使用select hex(铸造)的中' 作为字符(1)字符集(utf16)) 更新:发问者已经

在php中,
json\u encode()
将UTF8编码为十六进制实体,例如

json_encode('中'); // become "\u4e2d"

假设数据“\u4e2d”现在存储在MySQL中,是否可以从
“\u4e2d”
转换回
不使用PHP,只使用纯MySQL?

在我的配置中,选择hex('中'); 返回E4B8AD 这是UTF8字节的十六进制代码。自然 与代码点4e2d的十六进制不同,但您可以 使用select hex(铸造)的中' 作为字符(1)字符集(utf16))

更新:发问者已经编辑了这个问题,在我看来,这是一个完全不同的问题,现在它显然是:如何获得中' 当4e2d是的代码点时,给定一个包含“\u4e2d”的字符串中 默认字符集是utf8。好的,就是这样
选择cast(char(conv(right('\u4e2d',4),16,10)(使用utf16)作为char(1)字符集utf8);

将非ASCII字符编码为JavaScript实体只是JSON编码器将执行的不同操作之一,实际上并不是强制性的:

echo json_encode('中'), PHP_EOL;
echo json_encode('中', JSON_UNESCAPED_UNICODE), PHP_EOL;
echo json_encode('One "Two" Three \中'), PHP_EOL;
“\u4e2d”
"中"
“一”“二”“三\\\u4e2d”
因此,唯一安全的解码方法是使用专用的JSON解码器。MySQL捆绑了自5.7.8以来所需的功能:

SET @input = '"One \\"Two\\" Three \\\\\\u4e2d"';
SELECT @input AS json_string, JSON_UNQUOTE(@input) AS original_string;
json\u字符串原始\u字符串
============================    ===================
“一”“二”“三”“一”“二”“三”\中
()

如果你有一个较旧的版本,你将不得不求助于更复杂的解决方案(你可以在谷歌上搜索第三方UDF)


在任何情况下,我建议您回到设计表。奇怪的是,在没有合适的JSON解码器的情况下,您需要JSON数据。

Er…是
E4B8AD
,而不是
4e2d
。它看起来像PHP或JavaScript实体,因此可能是Unicode代码点。@alvarogonzález,谢谢,我已经更新了更详细地说,这些答案有帮助吗?