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

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

推薦する

CSS で TikTok テキスト揺れエフェクトを実装する例

日々の開発において、フロントエンドの学生はアニメーションやデザインについてよく議論します。デザイナー...

MySQL 面接の質問: ハッシュ インデックスの設定方法

B-Tree インデックスに加えて、MySQL は次のインデックスも提供します。ハッシュインデックス...

grep を使用して MySQL エラー ログ情報を取得する方法の詳細な説明

MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...

nginx プロキシ ポート 80 からポート 443 への実装

nginx.conf設定ファイルは次のとおりです。 ユーザー nginx; ワーカープロセス 1; ...

カスタム変数を使用した MySQL クエリの最適化

目次並べ替えクエリの最適化変更されたばかりのデータ行を繰り返し取得しないようにする遅延ロードされた結...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...

さまざまなSQL結合を簡単に学ぶ

SQL JOIN 句は、テーブル間の共通フィールドに基づいて 2 つ以上のテーブルの行を結合するため...

Uniappがスライディングスコアリング効果を実現

この記事では、スライディングスコアリングを実装するためのuniappの具体的なコードを参考までに共有...

MySQL 5.7 でブロックポジショニング DDL の問題を解決する

前回の記事「MySQL テーブル構造の変更、メタデータ ロックを知っておく必要があります」では、MD...

jQueryは従業員情報の追加と削除の機能を実装します

この記事では、従業員情報の追加と削除の機能を実装するためのjQueryの具体的なコードを参考までに共...

全文検索とキーワードスコアリング方式のMySQL実装例

1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...

ブラウザの互換モードでボタン内のテキストが垂直方向に中央揃えにならない問題について簡単に説明します。

XML/HTML コードコンテンツをクリップボードにコピー<ボタンスタイル= "カ...

Elementのメッセージポップアップウィンドウが繰り返しポップアップする問題の解決

目次1. 使用2. メッセージポップアップウィンドウが繰り返し表示される問題を解決する1. 使用Vu...

Vue はタブ ラベルを実装します (ラベルが自動スクロールを超える)

作成されたタブラベルがページの表示領域を超えると、タブラベルの距離だけ自動的にスクロールされます。ま...