MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます

MySQLデータベースに中国語の文字を保存するときに発生するエラーを解決する方法を教えます

1. 遭遇した問題

データベースに中国語の文字を保存するときに、次の問題が発生しました。

原因: java.sql.SQLException: 行 1 の列 'user_name' の文字列値 '\xE6\x9F\xAF\xE5\x8D\x97' が正しくありません

ここに画像の説明を挿入

2. 問題を分析する

これはデータベース設計の問題によるものです。データベースの作成時に、utf-8 に変更せずにデフォルトを直接選択しました。後で手動で変更しようとしましたが、それでも機能しませんでした

データベースとテーブルのデフォルトフィールドを utf8 に変更してみましたが、中国語の文字はまだ保存できません。

ここに画像の説明を挿入
ここに画像の説明を挿入

3. 本当の問題

ここに画像の説明を挿入

実際の問題は、テーブル情報を開くとlatin1の存在がわかることです。これは、後でフィールド タイプを手動で変更しても、変更できないためです。上記と同様に、変更してもテーブル情報は変更されません。実際の解決策は次のとおりです。1. データベースを再作成し、作成時に utf8 に設定します (少し難しい)。2. または、次の解決策 (多くのフィールドが関係している場合はそれほど簡単ではありません) を実行して、SQL ステートメントをエクスポートして変更し、SQL ステートメントを再実行します。

4. 解決策

データベースを SQL ファイルとしてエクスポートします。

/*
SQLyog Enterprise v12.08 (64 ビット)
MySQL - 5.7.31 : データベース - data_test
****************************************************************************
*/


/*!40101 名前をutf8に設定 */;

/*!40101 SQL_MODE を '' に設定します */;

/*!40014 @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS、UNIQUE_CHECKS=0 に設定 */;
/*!40014 @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS、FOREIGN_KEY_CHECKS=0 に設定 */;
/*!40101 @OLD_SQL_MODE=@@SQL_MODE、SQL_MODE='NO_AUTO_VALUE_ON_ZERO' を設定します */;
/*!40111 @OLD_SQL_NOTES=@@SQL_NOTES、SQL_NOTES=0 に設定 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`data_test` /*!40100 デフォルト文字セット latin1*/;

`data_test` を使用します。

/*テーブル `user` のテーブル構造 */

`user` が存在する場合はテーブルを削除します。

テーブル `user` を作成します (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(50) 文字セット latin1 NOT NULL コメント 'アカウント',
  `password` varchar(50) 文字セット latin1 NOT NULL コメント 'password',
  `user_state` varchar(10) CHARACTER SET latin1 NOT NULL DEFAULT '1' COMMENT 'ステータス、論理削除',
  主キー (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 デフォルトCHARSET=latin1;

/*テーブル `user` のデータ */

LOCK TABLES `user` WRITE;

`user`(`user_id`,`user_name`,`password`,`user_state`) に値 (1,'keafmd','keafmd','1'),(3,'21312321','123','0'),(11,'213','213','1'),(12,'keafmd','666','0') を挿入します。

テーブルのロックを解除します。

/*!40101 SQL_MODE を @OLD_SQL_MODE に設定します */;
/*!40014 FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS を設定します */;
/*!40014 UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS を設定します */;
/*!40111 SQL_NOTES=@OLD_SQL_NOTES を設定します */;

前述のように、latin1 が見つかったので、すべてのlatin1 utf8に置き換えます。

置き換えられたSQLファイル:

/*
SQLyog Enterprise v12.08 (64 ビット)
MySQL - 5.7.31 : データベース - data_test
****************************************************************************
*/


/*!40101 名前をutf8に設定 */;

/*!40101 SQL_MODE を '' に設定します */;

/*!40014 @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS、UNIQUE_CHECKS=0 に設定 */;
/*!40014 @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS、FOREIGN_KEY_CHECKS=0 に設定 */;
/*!40101 @OLD_SQL_MODE=@@SQL_MODE、SQL_MODE='NO_AUTO_VALUE_ON_ZERO' を設定します */;
/*!40111 @OLD_SQL_NOTES=@@SQL_NOTES、SQL_NOTES=0 に設定 */;
CREATE DATABASE /*!32312 存在しない場合は*/`data_test` /*!40100 デフォルトの文字セット utf8 */;

`data_test` を使用します。

/*テーブル `user` のテーブル構造 */

`user` が存在する場合はテーブルを削除します。

テーブル `user` を作成します (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(50) 文字セット utf8 NOT NULL コメント 'Account',
  `password` varchar(50) 文字セット utf8 NOT NULL コメント 'password',
  `user_state` varchar(10) 文字セット utf8 NOT NULL デフォルト '1' コメント 'ステータス、論理削除',
  主キー (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 デフォルト CHARSET=utf8;

/*テーブル `user` のデータ */

LOCK TABLES `user` WRITE;

`user`(`user_id`,`user_name`,`password`,`user_state`) に値 (1,'keafmd','keafmd','1'),(3,'21312321','123','0'),(11,'213','213','1'),(12,'keafmd','666','0') を挿入します。

テーブルのロックを解除します。

/*!40101 SQL_MODE を @OLD_SQL_MODE に設定します */;
/*!40014 FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS を設定します */;
/*!40014 UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS を設定します */;
/*!40111 SQL_NOTES=@OLD_SQL_NOTES を設定します */;

SQLスクリプトの実行を選択し、変更したSQLファイルを選択します。

ここに画像の説明を挿入

テーブル情報を確認してください

ここに画像の説明を挿入

この方法ではすべて utf8 となり、基本的に問題は解決します。

5. ソリューション効果

問題が本当に解決されたかどうかを確認するためのテスト:

ここに画像の説明を挿入

ここに画像の説明を挿入

これで、MySQL の基礎 - データベースに中国語の文字を保存するときにエラーを解決する方法についての記事は終了です。データベースに中国語の文字を保存するときにエラーを解決する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • dockerがredisを再起動するとmysqlデータが失われる問題を解決する
  • MySQL で置換操作を使用したときにデータ損失が発生する問題の解決策
  • サーバーがダウンしたときにMySQLデータの損失を防ぐためのいくつかのソリューション
  • MySQLでデータを削除してもディスク領域が解放されないのはなぜですか
  • Python の基礎: MySQL データベースの操作
  • Djangoは写真をMySQLデータベースに保存し、フロントエンドページに表示します。
  • MyBatis バッチによる MySql データの挿入/変更/削除
  • 画像をMySQLデータベースに保存し、フロントエンドページに表示するための実装コード
  • MySQLデータ移行の概要
  • GolangはMySQLデータベーストランザクションの送信とロールバックを実装します
  • MySQLインストール後のデフォルトデータベースの役割の詳細な説明
  • MySQLデータ損失の原因と解決策

<<:  1 つの記事で v-model とその修飾子を学ぶ

>>:  コンテンツウェブページの画像プレビューのデザイン

推薦する

mysql5.7.22 ダウンロードプロセス図

1. 公式ウェブサイト www.mysql.com にアクセスし、ダウンロードを選択します。 2. ...

CentOS8でのDockerの使い方の詳しい説明

1. CentOS8でのDockerのインストール カール https://download.doc...

DOCTYPE宣言の機能と使い方の詳しい説明

1. ブラウザのレンダリングモードとdoctype一部の Web ページは標準に従って作成されていま...

MIME エンコーディングの概要 (オンライン情報と実際の経験から統合)

1. MIME: 多目的インターネットメール拡張インペリアル カレッジ オブ コンピュータ オンラ...

MySQLインデックスの使用に関するヒントと注意事項

1. インデックスの役割一般的なアプリケーション システムでは、読み取りと書き込みの比率は約 10:...

Docker Composeオーケストレーションツールの詳細な説明

Docker の作成Docker Compose は、複数の Docker コンテナを定義して実行す...

美しいチェックボックススタイル(複数選択ボックス)はIE8/9/10、FFなどと完全に互換性があります。

恥ずかしながら、このようなよく使われるチェックボックスのスタイルを変更するために、Baidu で長い...

Vueのライブ放送機能の詳しい説明

最近、会社でたまたま生放送をしていたのですが、今日は私が遭遇した落とし穴を記録します。会社のサーバー...

Vue3.0 で Vuex 状態管理を開始する方法をすぐに習得します

Vuex は、Vue.js アプリケーション専用に開発された状態管理パターンです。集中型ストレージを...

MySQL マスタースレーブレプリケーションプロセスの詳細な説明

1. マスタースレーブレプリケーションとは何ですか?マスター データベースの DDL および DML...

MySQL ステートメントの実行順序と書き込み順序の例の分析

選択ステートメントの完全な構文は次のとおりです。 選択 DISTINCT <選択リスト>...

MySQL 単一テーブルクエリの例の詳細な説明

1. データを準備するこのテーブルでは次の操作が実行されます 学生テーブルを作成 ( id int ...

州と市町村の連携を簡単に実現するJavaScript

この記事では、省と市の簡単な連携を実現するためのJavaScriptの具体的なコードを参考までに紹介...

HTML+CSSプロジェクト開発経験概要(推奨)

ここ数日ブログを更新していませんでした。簡単な HTML+CSS プロジェクトを終えたところです。数...

CocosCreator で物理エンジン ジョイントを使用する方法

目次マウスジョイント マウスジョイント距離ジョイント距離ジョイントモータージョイント直動ジョイント変...