一、unicode三种格式
&#
、&#x
、\u
都可以用来表示一串 unicode 编码。
其实 \u 开头和 &#x 开头是一样的 都是16进制 unicode字符的不同写法,&# 则是 unicode字符的10进制的写法.
\u 16进制unicode
&#x 16进制unicode
&# 10进制unicode
二、MySQL表中unicode的转码
有些应用在保存数据时,不是使用mysql的编码,而是预先进行了转码,这样保存在表里的就是转码后以unicode格式保存的内容。如果都要从mysql中检索出来之后在程序里处理,就无法利用mysql本身的检索等能力。而且,如果用外部程序转换完再重新保存回mysql表,性能又差。
网上有针对16进制unicode代码编写的unicode转汉字mysql 函数,参考16进制代码,我编写了十进制unicode转汉字的函数,更简单。
DROP FUNCTION IF EXISTS unicode_decode;
DELIMITER $$
CREATE FUNCTION unicode_decode(content text)
RETURNS text
BEGIN
DECLARE code varchar(20);
DECLARE n_index,s_index smallint unsigned default 0;
DECLARE result,tmp_txt text;
DECLARE temp varchar(1);
SET s_index=LOCATE("&#", content,1);
set result = "";
while s_index>0 DO
set code = conv(substring(content,s_index+2,5),10,10);
set temp = convert(char(code) USING 'ucs2');
set result = concat(result,temp);
set s_index = LOCATE("&#", content, s_index+1);
END while ;
RETURN result;
END $$
16进制的转码代码参见: