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

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

推薦する

Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...

IDEA2020.1.2 Webプロジェクトの作成とTomcatの設定に関する詳細なチュートリアル

この記事は、IDEA で Web プロジェクトを作成し、Tomcat を構成する方法についての統合記...

Vueフロントエンドの効率的な開発のためのレンダリング手順をリストします

v-for ディレクティブリストといえば、ループについても触れなければなりません。v-for 命令は...

yum から docker インストール パッケージをダウンロードし、オフライン マシンにインストールする例の詳細なコード

1. ネットワークマシンでは、デフォルトのcentosyumソースを使用します [root@kole...

JavaScript でよく使われる 3 つの Web エフェクトの詳細な説明

目次1要素オフセットシリーズ1.1 オフセットの概要1.2 オフセットとスタイルの違い視覚領域クライ...

MySQL データベースの型変換のための CAST 関数と CONVERT 関数の説明

MySQL のCAST()およびCONVERT()関数を使用すると、ある型の値を取得し、別の型の値を...

JavaScriptでカレンダー効果を素早く実装

この記事では、カレンダー効果を素早く実現するためのJavaScriptの具体的なコードを例として紹介...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

Windows 10 と MySQL 5.5 のインストールとインストールなしの使用の詳細なチュートリアル (画像とテキスト)

この記事では、Windows 10環境でのMySQL 5.5のインストールと使用方法を紹介します。リ...

MySQL pt-slave-restart ツールの使い方の紹介

目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...

Docker+Jenkinsによる自動デプロイの実現方法

Code Cloud を使用して Git コード ストレージ ウェアハウスを構築するhttps://...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...

ReactRouterの実装

ReactRouterの実装ReactRouterはReactのコアコンポーネントです。主にReac...

クールな充電アニメーションを実現する純粋なCSS

CSS のみを使用してどのような充電アニメーション効果を作成できるかを見てみましょう。バッテリーを...