WebSurfer's Home

Filter by APML

MySQL 8.0 Command Line Client ツール

by WebSurfer 5. October 2023 16:52

MySQL 8.0 のツールに Command Line Client と Command Line Client - Unicode がありますが、何が違うのかを調べてみました。調べたことを備忘録として書いておきます。

Command Line Client

ダウンロードサイト MySQL Community Downloads から MySQL 8.0 のインストーラーを入手し Windows PC にインストールすると、上の画像の赤枠で示すように MySQL 8.0 Command Line Client と MySQL 8.0 Command Line Client - Unicode という 2 つのツールが利用できるようになります。

何がどう違うのか調べていたら、MySQL のドキュメント「4.5.1.6 mysql Client Tips」の「Unicode Support on Windows」というセクションに説明が見つかりました。以下に記事の抜粋を載せておきます。

"Windows provides APIs based on UTF-16LE for reading from and writing to the console; the mysql client for Windows is able to use these APIs. The Windows installer creates an item in the MySQL menu named MySQL command line client - Unicode. This item invokes the mysql client with properties set to communicate through the console to the MySQL server using Unicode."

mysql client は Windows がコンソールを読み書きする UTF-16LE ベースの API を使うことができる。MySQL 8.0 Command Line Client - Unicode を起動することにより、mysql clien はコンソールを通じて MySQL server と Unicode を使って通信を行うようになる・・・ということらしいです。

具体的にどういうことになっているか、自分の環境(Windows 10 PC に MySQL 8.0.19 を Setup Type を Full に設定してインストール)で調べたことを以下に書きます。

まず、使われている charset (文字セット) をそれぞれの場合について調べました。結果は以下の画像の通りです。character-set-client, -connection, -results が異なるところに注目してください。character-set-database, -server は MySQL 8.0 のデフォルト utf8mb4 で両方同じとなっています。

Command Line Client

charset, Command Line Client

Command Line Client - Unicode

charset, Command Line Client - Unicode

character-set-client, -connection, -results の意味は MySQL のドキュメント「接続文字セットおよび照合順序」によると以下の通りです。

  • character_set_client: クライアントが送信するステートメントの文字セット
  • character_set_connection: サーバーがステートメントを受信したあと、変換する文字セット
  • character_set_results: サーバーがクライアントにクエリー結果を返信するときに使用する文字セット

上の画像の Command Line Client では character-set-client, -connection, -results が cp932 となっています。cp932 というのは Shift_JIS を Microsoft と OEM ベンダーが独自拡張した文字コードで、拡張部分を除けばほぼ Shift_JIS と思えばよさそうです。ということは Command Line Client で起動したコンソールからは Shift_JIS しか使えないということになるはずです。

例えば以下のようなテーブルが MySQL にあるとします。データベース、テーブルの charset は uft8mb4 です。このテーブルにツールで起動したコンソールからクエリを投げて試してみます。

MySQL のテーブル

ちなみに、上の画像の最後の行の Title 列の各文字は以下の通りです。

  • あ : Shift_JIS の文字
  • 丂 : Shift_JIS に無し、Unicode の BMP には含まれる
  • 𠀋 : サロゲートペア
  • 🍎 : サロゲートペア
  • 👨‍🌾 : サロゲートペア 👨 と 🌾 を ZeroWidthJoiner で連結

Command Line Client の場合は以下のようになります。Shift_JIS 以外は認識してくれないようです。

Command Line Client

Command Line Client - Unicode の場合は以下のようになります。𠀋 🍎 👨‍🌾 も where Title like '%〇%' の 〇 としては有効でした。

Command Line Client - Unicode

Tags: , ,

MySQL

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  December 2024  >>
MoTuWeThFrSaSu
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

View posts in large calendar