Mysql 中国語ソートルールの説明

Mysql 中国語ソートルールの説明

MySQL を使用する際、フィールドをソートしたりクエリしたりすることがよくあります。通常は、中国語のピンインの最初の文字でソートします。ただし、MySQL で中国語の文字をソートすると、中国語の文字のソート結果が間違っていることがよくあります。

この状況は MySQL の多くのバージョンで発生します。

この問題が解決されない場合、MySQL は実際に中国語を処理できなくなります。

この問題の原因は、MySQL が文字列をクエリするときに大文字と小文字を区別しないことです。MySQL をコンパイルする場合、通常、ISO-8859 文字セットがデフォルトの文字セットとして使用されます。そのため、比較プロセス中に中国語でエンコードされた文字の大文字と小文字が変換されると、この現象が発生します。

情報を確認した後、解決策は 2 つあります。

1. 中国語の文字を含むフィールドに「binary」属性を追加して、バイナリ フィールドとして比較できるようにします。たとえば、「name varchar(10)」を「name varchar(10)binary」に変更します。

2. テーブル構造を変更したり、MySQL を再コンパイルしたりしたくない場合は、クエリ ステートメントの order by 部分で CONVERT 関数を使用することもできます。

たとえば、名前フィールドが中国語で、並べ替える必要がある場合は、select * from mytable order by CONVERT(name USING gbk); と記述できます。

補足: MySQL データベースのデフォルトのソート問題

1. MySQL公式回答:

SELECT * FROM tbl -- これは「テーブル スキャン」を実行します。テーブルに DELETE/REPLACE/UPDATE が一度も実行されていない場合、レコードは挿入順序で表示されるため、このような結果になります。

つまり、MyISAM エンジン テーブルが削除または変更されず、order by なしの select ステートメントが実行されると、テーブルは挿入順にソートされます。

InnoDB テーブルで同じステートメントを実行した場合、INSERT 順序ではなく PRIMARY KEY 順序で配信されます。繰り返しますが、これは基盤となる実装の成果物であり、依存するものではありません。

InnoDB エンジン テーブルの場合、同じ状況で、order by なしの select は、主キーによって小さいものから大きいものの順に並べ替えられます。

2. データベース エンジン コマンドを表示します。

(1)テーブルで使用されているエンジンを表示する

テーブルの作成を表示します。

(2)MySQLがサポートするエンジンを確認する

エンジンを表示します。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL での utf8mb4 照合の例
  • MySQL 集計関数のソート
  • インデックススキャンを使用したMySQLソート
  • MySQL のあまり知られていないソート方法
  • MySQLのデフォルトのソートルールに基づく落とし穴
  • MySQL ソートの原則とケース分析
  • MySQLクエリのソートとページング関連
  • インデックスを使用して MySQL ORDER BY ステートメントを最適化する方法
  • MySQL のソートとページング (order by と limit) と既存の落とし穴
  • MySQL ソート機能の詳細

<<:  CSS を使用して複数列の等高レイアウトを設定する方法の例

>>:  Vue ページ スタック マネージャーの詳細

推薦する

JSは円形のプログレスバーのドラッグとスライドを実装します

この記事の例では、円形のプログレスバーのドラッグアンドスライドを実現するための具体的なJSコードを紹...

Win10 MySQLでCSVをエクスポートする2つの方法

Win10 で csv をエクスポートする方法は 2 つあります。1 つ目はツールを使用することです...

ウェブページのメモリとCPU使用量を削減する方法

<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...

Vue Router の 10 の高度なヒントのまとめ

序文Vue Router は、Vue.js の公式ルーティング マネージャーです。 Vue.js の...

React.FCとReact.Componentの使用に関する簡単な説明

目次1. React.FC<> 2. クラスxxはReact.Componentを拡張し...

MySQL 分離レベル操作プロセスの詳細説明 (cmd)

コミットされていない読み取りの例の操作プロセス - コミットされていない読み取り1. 2 つの My...

大規模なMySQLデータベース用のマスタースレーブシステムを構築するアイデアを共有する

今週は戦争のように忙しかったです。他人に操られているような気がします。毎日朝早く出勤して夜遅く帰り、...

Tomcat が IDEA のコンソールで文字化けを起こし、IDEA エンコーディングを UTF-8 に設定する方法

1. まず、TomcatログのエンコーディングとIdeaログ表示コンソールのエンコーディングを区別す...

HTMLテキスト内のすべてのタグを置き換える方法

(?i) は大文字と小文字を区別しないことを意味します。大文字と小文字をすべて置き換えます。 htm...

Linux での SELinux を理解する方法

目次1. SELinux の紹介2. SELinuxの基本概念2.1 仕事の種類2.2. セキュリテ...

VMware で Nginx+KeepAlived クラスタ デュアルアクティブ アーキテクチャを展開する際の問題と解決策

序文負荷分散には nginx を使用します。アーキテクチャのフロントエンドまたは中間層として、トラフ...

MySQL の起動オプションとシステム変数の例の詳細な説明

目次ブートオプションコマンドラインパラメータの長い形式と短い形式設定ファイル構成グループシステム変数...

Reactにおける制御されたコンポーネントと制御されていないコンポーネントの簡単な分析

目次制御されていないコンポーネント制御コンポーネント知らせ結論は制御されていないコンポーネントフォー...

Linux での MySQL 5.7.18 yum のアンインストールからインストールまでのプロセスの図

いろいろ苦労しましたが、やっと yum インストールの手順がわかりました。以前、バイナリ パッケージ...

表面的なウェブデザイン

<br />私はいつもYahooのウェブデザインが素晴らしいと信じてきました。しかし、こ...