MySQL 将 Unicode 解码为 UTF-8 函数

标签 mysql sql unicode utf-8

我想在插入表格时将 Unicode 字符串解码为 UTF-8。这是我拥有的:

('\u0645\u064e\u062b\u0652\u0646\u064e\u0649 \u00a0\u062c \u0645\u064e\u062b\u064e\u0627\u0646\u064d')

所以我希望将这些值转换为 UTF-8,例如:

INSERT INTO `nouns`(`NOUNID`, `WORDID`, `SINGULAR`, `PLURAL`) VALUES (781, 3188, '\u0646\u064e\u062c\u0652\u0645', ('\u0646\u064e\u062c\u0652\u0645'))

我正在将我的 h2 数据库迁移到 MySQL,所以我在编写 h2 数据库脚本时得到了这个:

INSERT INTO PUBLIC.NOUNS(NOUNID, WORDID, SINGULAR, PLURAL) VALUES
  (1, 5, STRINGDECODE('\u0623\u0628\u0651 '), STRINGDECODE
  ('\u0623\u0624\u064f\u0628\u0651')),
  (2, 9, STRINGDECODE('\u0623\u064e\u0628\u0627\u0628'), ''),

基本上\u0623\u0632\u0651 是 unicode 表示形式的阿拉伯字符,我想将它们转换为真正的阿拉伯字符,以便像那样存储在数据库中。 我正在尝试转换函数,但因为我是 mysql 的新手,所以无法实现:

SELECT CONVERT(_ucs2'\u0623' USING utf8);

最佳答案

MySQL 中没有解码 unicode 转义的内置函数,但您可以创建一个;见下文:

注意反斜杠在MySQL中是一个转义符,所以在写SQL的时候需要将反斜杠加倍:'\\u0623\\u064e\\u0628\\u0627\\u0628'

DELIMITER //

CREATE FUNCTION STRINGDECODE(str TEXT CHARSET utf8)
RETURNS text CHARSET utf8 DETERMINISTIC
BEGIN
declare pos int;
declare escape char(6) charset utf8;
declare unescape char(3) charset utf8;
set pos = locate('\\u', str);
while pos > 0 do
    set escape = substring(str, pos, 6);
    set unescape = char(conv(substring(escape,3),16,10) using ucs2);
    set str = replace(str, escape, unescape);
    set pos = locate('\\u', str, pos+1);
end while;
return str;
END//

DELIMITER ;

关于MySQL 将 Unicode 解码为 UTF-8 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062330/

相关文章:

mysql - 根据年月计算日期

mysql - 在 MySQL 中使用 EXISTS

sql - SQL Server中登录名和用户的区别

c# - 如何从字符串中删除 unicode.OtherSymbol

MySQL - 强制不使用缓存来测试查询速度

mysql - mysql中的舍入 float 有什么问题?

MySQL数据库结构优化

sql - oracle如何将日期保存为24小时格式

c++ - CRichEditCtrl 和 Unicode BOM

python - 将所有重音字符替换为对应的 LaTeX 字符