1. ホーム
  2. mysql

[解決済み] 不正な文字列値: '\xF0_x9F MySQL

2023-07-17 10:13:36

Question

MYSQLのテーブルにツイートを保存しようとしています。 その ツイート

<ブロッククオート

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 . しかし、そのカラムにツイートを格納しようとすると、次のようなエラーメッセージが表示されます。

Incorrect string value: '\xF0x9F' precedx8ExB6xF0x9F...' for column 'tweet_text' at row 1.

何が間違っているのでしょうか? どうすれば直せますか? 私は複数の言語も保存する必要があり、この文字セットはすべての言語で機能しますが、顔文字や絵文字などの特殊文字では機能しません。

これは私のテーブル作成ステートメントです。

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;

どのように解決するのですか?

私は最終的に問題を把握することができました。 私は、mysql の設定 my.ini のいくつかの設定を変更する必要がありました。 この記事はとても役に立ちました http://mathiasbynens.be/notes/mysql-utf8mb4#character-sets

まず、my.ini の文字セットを utf8mb4 に変更しました。 次に、mysqlクライアントで以下のコマンドを実行しました。

SET NAMES utf8mb4; 
ALTER DATABASE dreams_twitter CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

次のコマンドを使用して、変更が行われたことを確認します。

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