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 とその修飾子を学ぶ

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

推薦する

初心者がHTMLタグを学ぶ(3)

HTML に触れる初心者は、いくつかの HTML タグを学びます。関連記事:初心者が学ぶ HTML...

Linuxでpyファイルを直接実行する方法

1. まずファイルを作成します(ファイルを配置するディレクトリにcdします) myTest.py を...

Vue3 (V) HTTPライブラリaxiosの統合の詳細

目次1. axiosをインストールする2. アクシオスの使用1.ホームページでaxiosを参照する2...

PHP 開発環境の構築に関する win10 docker-toolsbox チュートリアル

画像をダウンロード docker プル mysql:5.7 docker pull php:7.2-...

Linux におけるドライバモジュールのパラメータ転送プロセスの分析

ドライバーモジュールに渡すパラメータ名、タイプ、権限を宣言します。 module_param(変数名...

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

目次MySql8.0 トランザクション分離レベルエラーの表示質問コマンドは次のように変更されますMy...

JavaScript関数の詳細な説明これを指す問題

目次1.関数内のこの方向1. 通常の機能2. コンストラクター3. オブジェクトメソッド4. イベン...

MySQL 8.0 の降順インデックス

序文インデックスが順序付けられていることは誰もが知っていると思いますが、MySQL の以前のバージョ...

HTML+CSS をベースにした素敵なフリップログインおよび登録インターフェースを作成します

素敵なフリップログインと登録インターフェースを作成する序文最近、ネットワーク ディスクを構築しようと...

MySQL の昇順および降順データソートの実装

データの昇順、降順ソート1. フィールド名による単一フィールドのソート順機能:どのフィールドを基準に...

ドロップダウンメニューを実現するためのHTML+CSS

1. ドロップダウンリストの例コードは次のとおりです。 <!doctypehtml> ...

Linuxで同一ファイルを見つける方法

コンピュータを使用すると、システム内に大量のゴミが生成されます。最も一般的なケースは、同じファイルが...

要素 el-button ボタンコンポーネントの使用の詳細な説明

1. 背景ボタンは非常によく使われており、Element のボタン機能は非常に包括的です。この記事で...

Linuxドライバのプラットフォームバスの詳細説明

目次1. プラットフォームバスの紹介1.1. Linuxドライバの分離と階層化1.1.1. Linu...

MySQLクエリステートメント内のユーザー変数のコード分析

前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ス...