質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

1回答

3107閲覧

MYSQLのコマンドプロント上でのみの文字化け

jinyo

総合スコア59

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

1クリップ

投稿2019/03/03 14:16

編集2019/03/03 14:29

#MySQLにて、コマンドプロンプト上でのみ文字化けします。

お世話になっております。助けてください!!

趣味でDjangoとMySQLで遊んでいたところ、表記のとおりコマンドプロンプト上でのみデータの中身の文字化けに悩んでおります・・・。
Djangoのwebページでは文字化けせず正常に表示されており、ODBCで接続したフリーソフトのDB管理GUIツールA5MK-2でも正常に表示されます。

最終的にutf8mb4 に統一(DjangoもMysqlサーバもcmdも)しようと試みているつもりです。

文字化け

MariaDB [test2]> select id , title from blogs_blog; +----+---------------------------------------------------+ | id | title | +----+---------------------------------------------------+ | 1 | ・・ッ・・・・・・・・ヲ・・ョ・・・・ィソ | | 2 | ・・・・・ュ・・ー2・・・・・ョ | | 14 | cli・・・・・・・・・・ィソ | | 15 | 4・・ェ・・ョ・・ョ・・・・ィソ | | 16 | 5・・ェ・・ョ・・ョ・エ・・ーセ・・ャ | | 22 | 1 | | 23 | ?????? | +----+---------------------------------------------------+ 12 rows in set (0.00 sec)

キャプチャも念のため。
文字化け

title列には、実際には「4番目の投稿」「はじめての投稿」といった、ブログアプリのブログタイトルが日本語で入っています。

環境

個別にインストールしたMYSQLをコンフィグ含めて削除後、XAMPPパッケージからインストールしました。

  • mysql Ver: 15.1 Distrib 10.1.38-MariaDB, for Win64 (AMD64)
  • DB名:test2
  • テーブル名:blogs_blog
  • ローカルホストのみです。

サーバ・クライアントの文字コード

MariaDB [(none)]> show variables like '%char%'; +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | C:\xampp\mysql\share\charsets\ | +--------------------------+--------------------------------+ 8 rows in set (0.00 sec)

テーブル定義とテーブルの文字コード

最初下記のようにUTF8になっていたので・・・・

MariaDB [test2]> show create table blogs_blog; | blogs_blog | CREATE TABLE `blogs_blog` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(200) CHARACTER SET utf8 NOT NULL, `published` datetime(6) NOT NULL, `image` varchar(100) CHARACTER SET utf8 NOT NULL, `category` varchar(50) CHARACTER SET utf8 DEFAULT NULL, `text` longtext CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 |

その後、Alter table Modifyでutf8mb4にし、現在は下記の状態です。

| blogs_blog | CREATE TABLE `blogs_blog` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(200) NOT NULL, `published` datetime(6) NOT NULL, `image` varchar(100) NOT NULL, `category` varchar(50) DEFAULT NULL, `text` longtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 |

my.iniの内容

# Example MySQL config file for small systems. # # This is for a system with little memory (<= 64M) where MySQL is only used # from time to time and it's important that the mysqld daemon # doesn't use much resources. # # You can copy this file to # C:/xampp/mysql/bin/my.cnf to set global options, # mysql-data-dir/my.cnf to set server-specific options (in this # installation this directory is C:/xampp/mysql/data) or # ~/.my.cnf to set user-specific options. # # In this file, you can use all long options that a program supports. # If you want to know which options a program supports, run the program # with the "--help" option. # The following options will be passed to all MySQL clients [client] # password = your_password #port = 3306 port = 3306 socket = "C:/xampp/mysql/mysql.sock" default-character-set=utf8mb4 #default-character-set=utf8 # Here follows entries for some specific programs # The MySQL server [mysqld] #port= 3306 port= 3306 socket = "C:/xampp/mysql/mysql.sock" basedir = "C:/xampp/mysql" tmpdir = "C:/xampp/tmp" datadir = "C:/xampp/mysql/data" pid_file = "mysql.pid" # enable-named-pipe key_buffer = 16M max_allowed_packet = 1M sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M log_error = "mysql_error.log" skip-character-set-client-handshake # Change here for bind listening # bind-address="127.0.0.1" # bind-address = ::1 # for ipv6 # Where do all the plugins live plugin_dir = "C:/xampp/mysql/lib/plugin/" # Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # # commented in by lampp security #skip-networking #skip-federated # Replication Master Server (default) # binary logging is required for replication # log-bin deactivated by default since XAMPP 1.4.11 #log-bin=mysql-bin # required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 1 # Replication Slave (comment out master section to use this) # # To configure this host as a replication slave, you can choose between # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the syntax is: # # CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, # MASTER_USER=<user>, MASTER_PASSWORD=<password> ; # # where you replace <host>, <user>, <password> by quoted strings and # <port> by the master's port number (3306 by default). # # Example: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret'; # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later # change in this file to the variables' values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 2^32 - 1 # (and different from the master) # defaults to 2 if master-host is set # but will not function as a slave if omitted #server-id = 2 # # The replication master for this slave - required #master-host = <hostname> # # The username the slave will use for authentication when connecting # to the master - required #master-user = <username> # # The password the slave will authenticate with when connecting to # the master - required #master-password = <password> # # The port the master is listening on. # optional - defaults to 3306 #master-port = <port> # # binary logging - not required for slaves, but recommended #log-bin=mysql-bin # Point the following paths to different dedicated disks #tmpdir = "C:/xampp/tmp" #log-update = /path-to-dedicated-directory/hostname # Uncomment the following if you are using BDB tables #bdb_cache_size = 4M #bdb_max_lock = 10000 # Comment the following if you are using InnoDB tables #skip-innodb innodb_data_home_dir = "C:/xampp/mysql/data" innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = "C:/xampp/mysql/data" #innodb_log_arch_dir = "C:/xampp/mysql/data" ## You can set .._buffer_pool_size up to 50 - 80 % ## of RAM but beware of setting memory usage too high innodb_buffer_pool_size = 16M innodb_additional_mem_pool_size = 2M ## Set .._log_file_size to 25 % of buffer pool size innodb_log_file_size = 5M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 ## UTF 8 Settings #init-connect=\'SET NAMES utf8\' #collation_server=utf8_unicode_ci #character_set_server=utf8 character_set_server=utf8mb4 skip-character-set-client-handshake #character_sets-dir="C:/xampp/mysql/share/charsets" [mysqldump] quick max_allowed_packet = 16M default-character-set=utf8mb4 [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates #default-character-set=utf8 default-character-set=utf8mb4 [isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout

ためしたこと と、状況

  • cmdからinsertしたデータは、Djangoからは正常に表示されます。A5MK-2でも正常に表示できます。

  • DBを新しくつくりテーブルを作ってそこにcmdからinsertしたところ、そちらも文字化けします。

  • 下記のコマンドをコマンドプロンプトから試しました。が、解消しません。

set names cp932;
ALTER DATABASE test2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

コマンドプロンプトから別のデータベースを検証用に作成し、テーブルを作成して、insertしてみましたが、登録はされますが、登録したデータがcmd上で文字化けします。A5MK-2からは正常に閲覧できます。insert時に日本語を含めたときだけ下記のようにwarningが表示されます。
> Query OK, 1 row affected, 1 warning (0.02 sec)

  • pcの再起動

他にどこをみるべきか、、、教えてください。
作り始めなので一度作り直したほうが早いかと思ってますが、勉強のため質問させていただきました。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/03 14:20

「文字化け」と言っているものが本当に文字化けかどうかは見ないとわかりません。実際の出力結果をご提示ください。(画面キャプチャのほうがいいかもしれませんが)
m.ts10806

2019/03/03 14:27

Warning出ているのでしたらログに何か出てる可能性はあるのでログもご確認ください。
jinyo

2019/03/03 14:29

わかりました。確認します。
jinyo

2019/03/03 14:55

下記試しました。コマンド通りますがselect fromしても文字化けのままです。 >mysql -u root test2 --default-character-set=sjis ログについては確認してますが、Warnningを故意に発生させていますが、そのタイミングででるログがありません。一般クエリログの出力がmy.iniでオフになっているかもしれません。そのへんの知識がないので出力設定について調べます。
jinyo

2019/03/03 15:05

すみません。眠くなってしまいました・・・。ログの確認の続きは明日にします。すみません。
jinyo

2019/03/05 16:08

mts10806様 お世話になります。下記のように不正な文字列というwarningでした。その他のログはよくわかりませんでした。 ``` MariaDB [test2]> insert into blogs_blog (title) values ('うんこ'); Query OK, 1 row affected, 4 warnings (0.01 sec) MariaDB [test2]> show warnings; ); +---------+------+--------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------------------------------- | Warning | 1366 | Incorrect string value: '\x82\xA4\x82\xF1\x82\xB1' for column 'title' at row 1 | +---------+------+--------------------------------------------------------------------------------+ 4 rows in set (0.00 sec) ```
guest

回答1

0

ベストアンサー

正直コマンドプロンプト(win)でmysqlのコマンドを叩く意義があるのでしょうか?

mysqlクライアントは優秀ではないので、どうしてもプロンプトからやりたいなら
リダイレクトで処理することをお勧めします
普通にphpMyAdminなどを自分の中の標準とすれば済むと思います

投稿2019/03/04 00:48

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinyo

2019/03/05 16:14

お世話になります。確かに仰るとおりですね。 コマンドプロンプトから操作するのはいまのとこユーザ管理とかアクセス管理とかで、テーブルのデータをみるのには使わないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問