MySQL で珍しい文字を挿入できないときの対処方法 (文字列値が正しくない)

MySQL で珍しい文字を挿入できないときの対処方法 (文字列値が正しくない)

最近、ビジネス側から、一部のユーザー情報の挿入に失敗し、エラー メッセージが「不正な文字列値:"\xF0\xA5....."」に似ているという報告がありました。このメッセージから判断すると、文字セットが特定の珍しい文字をサポートしていないことが原因であると思われます。

仮想マシンで再現されたシナリオは次のとおりです。

ステップ 1: 元のテーブル構造の文字セット環境をシミュレートします。

使用テスト;
テーブル `t1` を作成します (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `real_name` varchar(255) 文字セット utf8 デフォルト '' コメント '名前',
 `nick` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'ニックネーム',
 主キー (`id`)
) ENGINE=InnoDBAUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会員カード';

ステップ 2、まれな単語を挿入します (sqlyog シミュレーションを使用)。

1. まずオンライン環境をシミュレートし、文字セットを設定します。

wKiom1kUGECCXdKDAAAV9L1hpEY173.png

2. 珍しい文字を挿入します(珍しい文字については、http://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzb&ks=24E20&js=257E3 を参照してください)。

wKioL1kUGEHCtaAvAABxJXp_7Ow741.png

Wang を挿入してみます (Word で ALT キーを押しながら 152964 と入力します)。挿入が失敗したことがわかります。

ステップ3. real_nameの文字セットを変更します。

使用テスト;

alter table t1 change real_name real_name varchar(255) CHARACTER SET utf8mb4 DEFAULT '' COMMENT 'Name';

大きなオンライン テーブルの場合は、pt-osc を使用して処理できます。コマンドは次のとおりです。

pt-online-schema-change -uroot -h localhost --alter=" real_name を変更 real_name varchar(255) 文字セット utf8mb4 デフォルト '' コメント '姓名' " D=test, t=t1 --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --quiet --charset=utf8mb4 --dry-run
pt-online-schema-change -uroot -h localhost --alter=" real_name を変更 real_name varchar(255) 文字セット utf8mb4 デフォルト '' コメント '姓名' " D=test, t=t1 --no-check-replication-filters --alter-foreign-keys-method=auto --recursion-method=none --quiet --charset=utf8mb4 --execute

ステップ 4: 実験を再度挿入します。

1. まず文字セットを設定します。

wKiom1kUGECCXdKDAAAV9L1hpEY173.png

2. 再度挿入すると、挿入が成功したことを確認できます。

wKioL1kUGILTLvpxAAAdWKxKR5A899.png

コマンドラインクエリには文字化けしたコードはありません。

wKiom1kUGIPyeykFAAAiRzDqNxs956.png

以上です、参考にしてください。

以下もご興味があるかもしれません:
  • MySQL に絵文字を保存するときに表示されるエラー メッセージ「java.sql.SQLException: 文字列値が正しくありません:'\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法
  • MySQL が不正な文字列値の例外分析をスローする
  • MySql エラー 列の文字列値が正しくありません
  • MySQL の不正な文字列値の解決方法

<<:  Nodejs でタイムドクローラーを実装する完全な例

>>:  win2008 サーバー セキュリティ設定の展開ドキュメント (推奨)

推薦する

ウェブページのコピー防止機能の実装方法(クラッキング手法付き)

ソース ファイルを右クリックすると、次のコードが見つかります。 1. CSSを使用してFirefox...

Ubuntuはポート22を開きます

シナリオssh 経由で Ubuntu サーバーに接続するには、xshell ツールを使用する必要があ...

MySQL マスタースレーブレプリケーションの実践の詳細説明 - ログポイントに基づくレプリケーション

ログポイントベースのレプリケーション1. マスターデータベースとスレーブデータベースに専用のレプリケ...

Docker のタイムゾーンの問題とデータ移行の問題

最新のソリューション: -v /usr/share/zoneinfo/Asia/Shanghai:/...

Centos7 環境でソースコードから mysql5.7.16 をインストールする方法の詳細な説明

この記事では、centos7 環境でソース コードから mysql5.7.16 をインストールする方...

Dockerコンテナの入退出方法の詳細な説明

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...

MySQL の 6 つの一般的な制約タイプの詳細な説明

目次序文1.nullでない2. ユニーク3. デフォルト4.主キー自動増分主キー5. 外部キー6.チ...

CSSは高さと幅を固定した要素の比例表示効果を実現します

padding-top パーセンテージを使用すると、固定幅と比例した高さの表示を実現できます。現在の...

JavaScript配列の一般的なメソッドの概要

目次1. はじめに2. フィルター() 3. マップ() 4. ソート() 5. 減らす() 6. ...

ページスピードの最適化の概要

インターネットは人々の生活にますます欠かせないものになってきていると思います。 Ajax や fle...

CSS3 のメディアクエリと rem レイアウトを組み合わせてモバイル画面に適応

CSS3 構文: (750 ピクセルのデザインの場合、1rem = 100 ピクセル) @media...

HTML初心者や初級者向けの提案。専門家は無視してかまいません。

感想:私はバックエンド開発者です。静的 (HTML) ページを取得すると、ページ構造と命名規則が極端...

Dockerリポジトリの一般的なコマンドの詳細な説明

ログイン dockerログインdocker login コマンドを実行し、ユーザー名、パスワード、メ...

MySQL InnoDB ロック メカニズムの詳細な例

1. InnoDBのロック機構InnoDB ストレージ エンジンは、行レベルのロックとトランザクショ...

CSS で波の効果を作成するためのアイデア

以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...