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

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

推薦する

Python で pymysql モジュールを使用して MySQL データベースに接続する

pymysqlをインストールするpip install pymysql 2|0pymysqlの使用2...

データベースのデフォルトパスを変更した後にmysqlが起動できない問題の解決策

序文mysql がデフォルトのデータベース パスを変更したため、サービスを開始できませんでした。ログ...

MySQLクエリで大文字と小文字を区別しない問題を解決する方法

質問最近、SSH フレームワークを使用して実用的なプロジェクトを完了していたときに、長い間悩まされて...

ウェブページの画像の回転を実現するjs

この記事では、Webページの画像の回転を実現するためのjsの具体的なコードを参考までに共有します。具...

qt.qpa.plugin の問題を解決: Ubuntu 18.04 の Qt で Qt プラットフォーム プラグイン「xcb」をロードできませんでした

問題の説明Qt5.15.0 をインストールした後、テスト ケースを実行するとエラーが表示されます。 ...

WeChatアプレットの手動および自動追跡の実装の詳細説明(Taro)

どの企業もユーザーベースを拡大したいのであれば、ユーザーの操作データを収集・分析する必要があり、その...

Docker での環境変数の使用とよくある問題の解決策

序文Docker はコンテナの環境変数を設定できます。設定方法は 2 つあります。イメージを作成する...

MySQL で大文字と小文字を区別しないように設定する方法

mysql は大文字と小文字を区別しないように設定されていますウィンドウズmysqlがインストールさ...

CSS3 で背景ぼかしを実現する 3 つの方法 (要約)

1. 通常の背景ぼかしコード: <スタイル> html, 体 { 幅: 100%; 高...

CSS3は、欠けた角の長方形、折り畳まれた角の長方形、欠けた角の境界線を実装しています。

序文数日前、偶然、コーナーの四角形が欠落している機能に遭遇しました。最初に頭に浮かんだのは、必要な場...

CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...

JavaScriptで計算機機能を実現するプロセスの詳細な説明

目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...

Enterキーを押すとフォームが自動的に送信されます。予期せぬ発見

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

WeChatアプレット仮想リストの応用例

目次序文仮想リストとは何ですか?デモ効果準備スクリーンの高さとボックスの高さ最適化要約する序文人気の...