MySQL5.x处理中文全解
我这边用Java连接MySQL数据库,通过JDBC写入数据。在Java中直接生成的中文字符串,写入数据库变成半角问号?。以下是我解决此问题的记录。首先,我用Putty这个工
我这边用 Java 连接 MySQL 数据库,通过 JDBC 写入数据。在 Java 中直接生成的中文字符串,写入数据库变成半角问号“?”。以下是我解决此问题的记录。
首先,我用 Putty 这个工具连接 MySQL 以检查中文写入情况。这里有一个设置。此设置如果不对,则会导致乱码。
然后,MySQL 提供了关于字符集的很多变量。可以通过 MySQL 命令来查看。
输入命令:mysql> SHOW VARIABLES LIKE '%char%';
会看到如下内容:
相信大家这些变量不全是 utf8 吧?比如有的是 'utf-8' ,有的是 'latin1' 一类的?全部都改成 'utf8' 才能保持一致,不出现乱码。
设置变量语句格式:mysql> SET character_set_server='utf8'; 将变量名一个个修改成值非 utf8 的那些,逐句执行就行。
另外除非全部系统 + 所有用户都是纯微软环境,香港服务器租用,否则不要使用微软推广的 GBK 字符集,不通用。
接 下来解释一下,为什么不能用 UTF-8 、utf-8 一类的名称,美国空间,必须用 utf8 。大家可以看到 character_sets_dir 这个特变量。到其指定的目录中看一下,就会发现很多字符集文件。其中 Index.xml 是一个字符集名称的索引文件,里边有这么一段:
咱们就是得让指定的字符集名称和这里设定的 charset name 保持一致。这里写为 utf8 ,所以咱们的变量都得设为 utf8 。
通过命令设置的变量,在重启之后会恢复原设置。所以我们可以考虑通过 my.cnf 文件来直接配置 MySQL 的这些变量。
在 改动配置文件之前,肯定要做文件整个的备份。这个文件不能乱改,香港服务器租用,我试验的结果,应该在 [client] 里边添加 default-character-set=utf8 ,在 [mysqld] 里边添加 character_set_server=utf8 ,然后保证最下边 [mysql] 里边存在一个 default-character-set=utf8 。进行这种设定之后重启 mysqld ,就不用每次开启 MySQL 重新设定这些变量了。
---------- ---------- ---------- ----------
数据库解决完了,接下来就是 Java 连接数据库的问题了。
JDBC 连接时,需要提供连接的 URL 。对于 MySQL 来说,这个连接应该设定几个参数:useUnicode=true&characterEncoding=UTF-8 。这个写法要严格一致,绝不能有偏差,比如把 UTF-8 写成 utf8 则会造成功能失常。如果没有别的连接参数,就用 ? 引导这二个参数,否则用 & 引导。
当然了,Java 里边的数据本身不能内容就是乱码。这个是另外的事情。只要保证 Java 运行时,监测变量的值本身不是乱码,就可以保证读写数据库不再是乱码了。
本文也发表在我于 CSDN 的日志:
ITeye 我的日志:
中国开源社区我的日志:
本文出自 “Shane from Spads” 博客,请务必保留此出处

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。
