已经使用 utf8mb4 但得到 1366: 错误的字符串值: '\xF0\x9F\x98\x81\xF0\x9F...'

问题描述 投票:0回答:2

“字符串值不正确”问题的所有答案都指向使用 utf8mb4。但是,我仍在使用它,我仍然收到该错误。

跑步

SELECT CCSA.character_set_name, collation_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "test"
  AND T.table_name = "products";

产生

character_set_name  collation_name
utf8mb4             utf8mb4_unicode_ci

还有跑步

SELECT character_set_name, collation_name FROM information_schema.`COLUMNS` 
WHERE table_schema = "test"
  AND table_name = "products"
  AND column_name = "description";

产生相同的结果。然后,当我尝试更新列

description
时: 更新
test
products
设置
description
='Esperienza molto negativa...😁😁😁😁SCONSIGLIATISSIMO',其中
id
='50'

我收到上述错误

1366: Incorrect string value: '\xF0\x9F\x98\x81\xF0\x9F...' for column 'description' at row 1

我已经通过 jdbc 连接

jdbc:mysql://localhost:3306/test?useUnicode=yes;characterEncoding=utf8;
和直接通过 MySQLWorkbench 尝试了此更新。我不知道还能尝试寻找什么。我错过了什么?

编辑

SHOW CREATE TABLE

的输出
CREATE TABLE `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `manufacturerId_fk` int(11) NOT NULL,
  `type_fk` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'TEST',
  `ownerId_fk` int(11) DEFAULT NULL,
  `rating_fk` int(11) NOT NULL,
  `description` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `authorName` varchar(75) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `authorUrl` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `manufacturer_authorUrl_UNIQUE` (`manufacturerId_fk`,`authorUrl`),
  KEY `fk_products_manufacturers_idx` (`manufacturerId_fk`),
  KEY `fk_products_users_idx` (`ownerId_fk`),
  KEY `fk_products_validRatings_idx` (`rating_fk`),
  KEY `fk_products_productTypes` (`type_fk`),
  CONSTRAINT `fk_products_productTypes` FOREIGN KEY (`type_fk`) REFERENCES `productTypes` (`type`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_products_manufacturers` FOREIGN KEY (`manufacturerId_fk`) REFERENCES `manufacturers` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_products_validRatings` FOREIGN KEY (`rating_fk`) REFERENCES `validRatings` (`value`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=418 DEFAULT CHARSET=utf8mb4
java mysql jdbc encoding character-encoding
2个回答
1
投票

我在文本字段中也遇到了类似的问题。 (MySQL 1366错误字符串值不正确)

我确认数据库、表、列字符集都是

utf8mb4

通过将字段类型更改为

longtext
解决了问题。

希望这可以帮助别人。


0
投票

有必要检查表和具体字段的类型成本。据我了解,如果在创建表后应用配置,则更改数据库的字符类型不会影响表和字段设置。我更改了数据库类型、表和从 utf-8 写入值的特定字段的设置。 查询将如下所示:

ALTER TABLE `dbName`.`TableName` 
CHARACTER SET = utf8mb4 ;

这是为了桌子。对于领域:

ALTER TABLE `TableName` 
CHANGE COLUMN `columname` `columname` type CHARACTER SET 'utf8mb4' NOT NULL ; 

在使用函数时以及其他情况下也可能会发生与排序规则相关的错误。要修复此问题,请将表字段排序规则更改为兼容的排序规则。错误示例:

错误代码:1267。操作“=”时非法混合排序规则 (utf8mb4_0900_ai_ci,IMPLICIT) 和 (utf8mb4_general_ci,IMPLICIT)

© www.soinside.com 2019 - 2024. All rights reserved.