在MySQL中为列设置编码时出现“不正确的字符串值:'\xF0\x9F\x92\x8F\x0A#...”错误?

3

我是MySQL的新手。我有一个在MySQL表中存储Unicode字符的列。

我有一段代码,可以从Twitter、Facebook等获取帖子,并将文本/符号“原样”插入表中。

CREATE TABLE `tbl_unicode` (
  `_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) NOT NULL,
  `uninoce_Column` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`_id`)

) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8;


/* This query WONT work due to SYMBOL:   */
INSERT INTO `tbl_unicode`
  (`_id`,
  `first_name`,
  `uninoce_Column`)
VALUES
  (2,
  'rakesh',
  '最高の休日
#京都#宮津#天の橋立#');


/* This query WORKS FINE */
INSERT INTO `tbl_unicode`
  (`_id`,
  `first_name`,
  `uninoce_Column`)
VALUES
  (1,
  'shekhar',
  '最高の休日
#京都#宮津#天の橋立#');
enter code here

点击此处,在SQLFiddle上查看实时演示

那么,我应该使用哪种数据类型或配置才能使其正常工作呢?

您有什么建议吗?

2个回答

6

字符集utf8

MySQL的utf8字符集并非UTF-8。那太简单了!相反,它是一个受限制的UTF-8子集,仅支持存储在三个UTF-8字节中的代码点高达U+00FFFF。 U+01F48F是不适用于该表的字符集的。

实际的UTF-8字符集在MySQL(5.5及更高版本)中被称为utf8mb4


1
如何设置? - user1735921
ALTER TABLE table_name MODIFY COLUMN col_name datatype CHAR SET utf8 COLLATE utf8_general_ci; 修改表名为table_name的列名col_name的数据类型为CHAR,字符集为utf8,校对规则为utf8_general_ci。 - Kavindu Pasan Kavithilaka

-1

在您的表字段中使用nvarchar作为数据类型。varchar仅存储8位字符,而nvarchar还可以存储Unicode字符。


MYSQL 中有 nvarchar 吗? - SHEKHAR SHETE
不对,那是 Microsoft SQL Server 的数据类型,在 MySQL 中不存在。 - user149341

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接