emoji表情写入数据库,解决Incorrect string value: '\xF0\x9F\x8C\xBB\"...' for column 'xxx' at row 1

1. 创建数据库的时候指定格式

CREATE DATABASE `testDB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci

2.创建表的时候指定

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `open_id` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uix_open_id` (`open_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.指定某一列

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `open_id` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uix_open_id` (`open_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4.也可以将emoji表情转换成unicode 

emoji为4个字节,使用golang 实现

//表情解码
func UnicodeEmojiDecode(s string) string {
	//emoji表情的数据表达式
	re := regexp.MustCompile("\\[[\\\\u0-9a-zA-Z]+\\]")
	//提取emoji数据表达式
	reg := regexp.MustCompile("\\[\\\\u|]")
	src := re.FindAllString(s, -1)
	for i := 0; i < len(src); i++ {
		e := reg.ReplaceAllString(src[i], "")
		p, err := strconv.ParseInt(e, 16, 32)
		if err == nil {
			s = strings.Replace(s, src[i], string(rune(p)), -1)
		}
	}
	return s
}

//表情转换
func UnicodeEmojiCode(s string) string {
	ret := ""
	rs := []rune(s)
	for i := 0; i < len(rs); i++ {
		if len(string(rs[i])) == 4 {
			u := `[\u` + strconv.FormatInt(int64(rs[i]), 16) + `]`
			ret += u

		} else {
			ret += string(rs[i])
		}
	}
	return ret
}

转载自 https://blog.csdn.net/zyx4843/article/details/77773286

 

你可能感兴趣的:(SQL,golang)