错误的字符串值:'\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL

6 浏览
0 Comments

错误的字符串值:'\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL

我正在尝试将一条推文存储在我的MYSQL表中。这条推文的内容是:tweet

quiero que me escuches, no te burles no te rias, anoche tuve un sueño que te fuiste de mi vida

最后两个字符都是'多个音符' (U+1F3B6),其UTF-8编码为0xf09f8eb6

我表中的tweet_text字段使用utf8mb4编码。但是当我尝试将推文存储在该列中时,出现以下错误消息:

Column 'tweet_text' at row 1 has an incorrect value: '\xF0\x9F\x8E\xB6\xF0\x9F...'.

出了什么问题?我该如何解决?我需要存储多种语言,而这个字符集对于所有语言都有效,但对于像表情符号和表情这样的特殊字符无效。

这是我的创建表语句:

CREATE TABLE `twitter_status_data` (
  `unique_status_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `metadata_result_type` text CHARACTER SET utf8,
  `created_at` text CHARACTER SET utf8 NOT NULL COMMENT 'UTC time when this Tweet was    created.',
  `id` bigint(20) unsigned NOT NULL COMMENT 'Unique tweet identifier',
  `id_str` text CHARACTER SET utf8 NOT NULL,
  `tweet_text` text COMMENT 'Actual UTF-8 text',
  `user_id_str` text CHARACTER SET utf8,
  `user_name` text COMMENT 'User''s name',
  `user_screen_name` text COMMENT 'Twitter handle',
  `coordinates` text CHARACTER SET utf8,
  PRIMARY KEY (`unique_status_id`),
  KEY `user_id_index` (`user_id`),
  FULLTEXT KEY `tweet_text_index` (`tweet_text`)
) ENGINE=InnoDB AUTO_INCREMENT=82451 DEFAULT CHARSET=utf8mb4;

0
0 Comments

在MySQL中出现“Incorrect string value: '\xF0\x9F\x8E\xB6\xF0\x9F...'”的问题,其原因是由于SET NAMES utf8utf8mb4编码不兼容。因此,在某些应用程序中,仅仅改变表/列的编码是不够的,还需要在应用程序配置中更改编码。

对于Redmine(ruby, ROR),在config/database.yml中进行如下修改:

production:

adapter: mysql2

database: redmine

host: localhost

username: redmine

password: passowrd

encoding: utf8mb4

对于自定义的Yii应用程序(PHP),在config/db.php中进行如下修改:

return [
    'class' => yii\db\Connection::class,
    'dsn' => 'mysql:host=localhost;dbname=yii',
    'username' => 'yii',
    'password' => 'password',
    'charset' => 'utf8mb4',
],

如果你的列/表编码为utf8mb4,但仍然出现类似错误的问题,请确保在应用程序中为数据库连接配置了正确的字符集。

对于Redmine,当配置应用程序时已存在的数据库时,可能无法正常工作,因此可以使用迁移代码修复,参考链接:redmine.org/issues/21398

感谢发布的Yii解决方案,它起到了作用。

0
0 Comments

最近我遇到了一个问题,当我尝试在MySQL中插入一些特殊字符时,出现了一个错误。错误信息是"Incorrect string value: '\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL"。经过一番调查,我终于找到了问题的原因和解决方法。

问题的原因是MySQL默认的字符集只能存储3个字节的UTF-8字符,而我尝试插入的字符是4个字节的UTF-8字符。因此,需要将MySQL的字符集设置为utf8mb4,以支持4个字节的字符。

解决方法如下:

1. 修改MySQL的配置文件my.ini,在其中将字符集设置为utf8mb4。

2. 在MySQL客户端中运行以下命令,以确保更改生效:

SET NAMES utf8mb4;

ALTER DATABASE dreams_twitter CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

3. 使用以下命令检查更改是否生效:

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

另外,如果您使用的是node npm sequelize + MySQL,需要以特殊的方式设置字符集。您可以参考这个链接了解更多信息。

最后,我还发现在插入数据时执行SET NAMES utf8mb4;命令后,无法获取预处理语句的新插入ID。如果您遇到了同样的问题,可以尝试其他解决方案。

总结一下,这个问题的原因是MySQL默认字符集不支持4个字节的UTF-8字符。要解决这个问题,我们需要将MySQL的字符集设置为utf8mb4,并在插入数据时执行SET NAMES utf8mb4;命令。希望这篇文章对你有所帮助!

0