mysql - Unicode 编码 - 错误 1366 : Incorrect string value: '\xF0' for column

标签 mysql string go character-encoding

我在使用 MySQL 编码解析数据然后存储来自 Twitter API 的数据时遇到了一些问题。

难以存储到数据库中的推文是:

   INSERT INTO `statuses` (`status_id`,`text`) VALUES('93332222111111','The beers are on me in this case!�')

字符是 this one . 而以下内容已成功存储:

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.\n\ne.g.: ORDER BY created_at\ne.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 block :

if utf8.ValidString(strings.Join(values, ",")) == false {
            fmt.Println(strings.Join(values, ","))
        }

返回:

'The beers are on me in this case!�','943304851980963841' 

最佳答案

解决您的问题的两个建议:

  • 使用UTF16字符集;
  • 使用 utf8mb4 作为字符集,使用 utf8mb4_unicode_ci 作为排序规则。

您可以使用以下代码作为示例,extracted from an online tutorial :

# 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 here .甚至这个 another emoji project .

关于mysql - Unicode 编码 - 错误 1366 : Incorrect string value: '\xF0' for column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48890952/

相关文章:

c - c 中的 if() 有点奇怪

c - 格式化字符串漏洞 - printf

go - 在 Go 中测试从 Function 返回的 Cookie

java.sql.SQLException : The url cannot be null

javascript - 如何将mysql数据库返回的数据转换成json

mysql - 从Sql中获取对比数据

mysql - 两个选择的交集

r - 将字符串数据集转换为矩阵

go - 将一个 slice 分成N个 slice

import - 包在 golang 中是如何工作的