我正在经历MySQL编码解析数据,然后从Twitter API中存储数据的问题。
努力存储到DB中的推文是:
INSERT INTO `statuses` (`status_id`,`text`) VALUES('93332222111111','The beers are on me in this case!�')
�
字符就是这个。
INSERT INTO `statuses` (`status_id`,`text`) VALUES('485072105225921','RT @someone: 🔥 Don't forget to index timestamp columns like "created_at" if you query against them.nne.g.: ORDER BY created_atne.g.: WH')
让我们看一下字符集:
SHOW VARIABLES LIKE 'character_set%'
带回来
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/local/Cellar/mysql/5.7.18_1/share/mysql/charsets/
我缺少的东西很明显吗?
更新:如果块:
if utf8.ValidString(strings.Join(values, ",")) == false {
fmt.Println(strings.Join(values, ","))
}
返回:
'The beers are on me in this case!�','943304851980963841'
可以解决您的问题的两个建议:
- 使用
UTF16
charset; - 将
utf8mb4
用作char集,将utf8mb4_unicode_ci
作为整理。
您可以以以下代码为例,从在线教程中提取:
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
由于您的问题不在数据库中,因此您必须使用代表图像的正确代码。我建议您使用" emoji-java":一个轻巧的Java库,可帮助您在Java应用程序中使用表情符号。
一个例子:
String str = "An :grinning:awesome :smiley:string 😄with a few :wink:emojis!";
String result = EmojiParser.parseToUnicode(str);
System.out.println(result);
// Prints:
// "An 😀awesome 😃string 😄with a few 😉emojis!"
另一个编辑:您现在只告诉您使用的语言:GO。在这种情况下,您可以在这里查看Go-emoji。甚至是另一个表情符号项目。
请勿将UTF16用于任何事物。
使用MySQL的CHARACTER SET utf8mb4
;它等同于外界的UTF-8
,包括以F0
开头的字符。(MySQL的utf8
不包括它们。(
🔥
,HEX F09F94A5
需要UTF8MB4。同上🍻
,十六进制F09F8DBB
。
�
表明某物已经弄乱了。也就是说,INSERT
的字符都不好。
请提供SELECT HEX(text) ...
,以查看您是否获得了其中一个十六进制值。
还请参见UTF-8字符麻烦的"黑色钻石";我看到的不是我存储的