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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

3回答

1112閲覧

MariaDBの文字化けがなおせません

awa

総合スコア34

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2018/07/12 15:20

編集2018/07/14 01:22

下記の要領でテーブルにレコードを追加したのですが、文字化けの原因がわかりません。
何が原因でどうしたら文字化けがなおるのか教えていただけませんでしょうか。
よろしくお願いいたします。

環境
OS:Windows10
DB:MariaDB(XAMPP for Windows)

【実行手順】

  1. コードページを65001に変更
Active code page: 65001
  1. MariaDBにルートユーザーでログインし、MariaDBの文字コードを確認

sql

1show variables like 'character_set%'; 2+--------------------------+--------------------------------+ 3| Variable_name | Value | 4+--------------------------+--------------------------------+ 5| character_set_client | utf8 | 6| character_set_connection | utf8 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | utf8 | 10| character_set_server | utf8 | 11| character_set_system | utf8
  1. sampledbというDBを作成し、DBの文字コードを確認

sql

1MariaDB [(none)]> create database sampledb character set utf8 collate utf8_general_ci; 2 3MariaDB [(none)]>show create database sampledb; 4+----------+-------------------------------------------------------------------+ 5| Database | Create Database | 6+----------+-------------------------------------------------------------------+ 7| sampledb | CREATE DATABASE `sampledb` /*!40100 DEFAULT CHARACTER SET utf8 */ | 8+----------+-------------------------------------------------------------------+
  1. memberテーブルを作成し、テーブルの文字コードを確認

sql

1MariaDB [(none)]> use sampledb; 2 3MariaDB [sampledb]> CREATE TABLE member( 4 -> id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, 5 -> last_name VARCHAR(50), 6 -> first_name VARCHAR(50), 7 -> age TINYINT UNSIGNED, 8 -> PRIMARY KEY(id) 9 -> ); 10 11MariaDB [sampledb]> show create table member \G 12 13*************************** 1. row *************************** 14 Table: member 15Create Table: CREATE TABLE `member` ( 16 `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 17 `last_name` varchar(50) DEFAULT NULL, 18 `first_name` varchar(50) DEFAULT NULL, 19 `age` tinyint(3) unsigned DEFAULT NULL, 20 PRIMARY KEY (`id`) 21) ENGINE=InnoDB DEFAULT CHARSET=utf8
  1. レコードを挿入し、selectでレコード内容を表示。文字化けを確認。

sql

1MariaDB [sampledb]> INSERT INTO member(last_name,first_name,age) 2 -> VALUES('田中','一郎',21); 3 4MariaDB [sampledb]> select * from member; 5+----+-----------+------------+------+ 6| id | last_name | first_name | age | 7+----+-----------+------------+------+ 8| 1 | ?? | ?? | 21 | 9+----+-----------+------------+------+

ちなみにwork.sqlというファイルに上記内容を記述し、コマンドプロンプトからSQLを読み込ませると、文字化けしていませんでした。

sql

1>mysql -u root -p < C:\temp\work.sql 2 3DBにログイン 4 5MariaDB [sampledb]> select * from member; 6+----+-----------+------------+------+ 7| id | last_name | first_name | age | 8+----+-----------+------------+------+ 9| 1 | 田中 | 一郎 | 21 | 10

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

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

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

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

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

guest

回答3

0

コマンドプロンプト起動時、自動的に文字コードをUTF-8にして日本語もちゃんと表示できるようにする方法 - Qiita
コマンドプロンプト上でコードページを変更しないとUTF-8の表示ができません。

が、コマンドプロンプトで逐一コードページを変えたりするのも面倒でしょうから、
A5SQL:Mk-IIなど使ってはいかがでしょうか。
A5:SQL Mk-2 - フリーの汎用SQL開発ツール/ER図ツール .. 松原正和

投稿2018/07/13 02:10

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

awa

2018/07/13 15:14

コードページを変更しても文字化けは解消されませんでした・・・。A5SQLもとても便利そうです。教えていただきありがとうございます。
guest

0

データの確認だけでしたらphpMyAdminなどご利用になっては?
phpなどのプログラムで利用する分にはさほど問題はないと思います
(接続の際に文字コードを指定するため)

投稿2018/07/13 01:29

yambejp

総合スコア114769

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

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

awa

2018/07/13 15:13

phpMyAdmin知らなかったです。確かにGUIでわかりやすくて便利そうです。
guest

0

ベストアンサー

自分で試したことは無いんですが、windowsのコマンドプロンプト、powershellって標準文字コードがShiftJIS(厳密にはcp932?)だと思われるので、UTF-8なDBに入力したら文字化けしそうな気がします。

↑だめでした。

参考
chcp 65001
で文字コードをUTF-8に変えてみるとどうなりますか?

XAMPP for linux とかだったら見当違いな回答なので、OSも追記してみて下さい。

追記
以下の方法で解決できますが、アプリケーション側で問題が起きそうな気がするので、おとなしくutf8をまともに扱えるクライアント(MySQL WorkbenchとかWindows Subsystem for Linuxのbashとか)からコマンドを発行するのをお勧めします。

原因は恐らく、

  1. コマンドプロンプト+windows用MySQLクライアントの環境ではutf8が正しく扱えないこと
  2. xamppのコントロールパネルから呼び出させるコマンドプロンプトは若干挙動が違う様で、コマンドプロンプトで通用する方法が通じないこと

の二つです。
以下の解決方法では

  1. コマンドプロンプトでは無理にutf8を扱おうとしない
  2. xamppのshellは使わない

という方向性で行っています。

解決方法

  1. my.iniを修正してクライアント周りの文字コードをcp932に戻します。

現在[client]のあたりにdefault-character-set=utf8となっている部分があるはずなのでdefault-character-set=cp932に変更

  1. MySQLを再起動します。
  2. Win+r → cmd でコマンドプロンプトを起動
  3. c:\xampp\mysql\bin\mysql.exe -u root でMySQLのにログイン
  4. 文字コードを確認
MariaDB [(none)]> show variables like '%char%'; +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | cp932 | | character_set_connection | cp932 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | cp932 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\xampp\mysql\share\charsets\ | +--------------------------+--------------------------------+ 8 rows in set (0.00 sec)

6 データの入力と確認

MariaDB [(none)]> use sampledb; Database changed MariaDB [sampledb]> INSERT INTO member(last_name,first_name,age) VALUES('田中','一郎',21); Query OK, 1 row affected (0.00 sec) MariaDB [sampledb]> select * from member; +----+-----------+------------+------+ | id | last_name | first_name | age | +----+-----------+------------+------+ | 1 | ?c?? | ???Y | 21 | | 2 | ?? | ?? | 21 | | 3 | ?? | ?? | 21 | | 4 | ?c?? | ???Y | 21 | | 5 | 田中 | 一郎 | 21 | | 6 | ?c?? | ???Y | 21 | | 7 | 田中 | 一郎 | 21 | | 8 | 田中 | 一郎 | 21 | | 9 | 田中 | 一郎 | 21 | | 10 | 田中 | 一郎 | 21 | | 11 | 田中 | 一郎 | 21 | +----+-----------+------------+------+ 11 rows in set (0.00 sec)

*最後の行以外は他の方法(PHPスクリプトからやMySQL Workbenchから)正しく入力したデータなので、正しく動いているであろうと判断しました。

投稿2018/07/12 16:45

編集2018/07/14 13:16
tanat

総合スコア18713

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

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

awa

2018/07/13 15:11

OSはWindows10です。教えていただいたサイトをもとにchcp 65001を実行してみましたが文字化けになります。sql文をファイルにしてcmdから取り込むと文字化けせずにselectで表示されました。ということはcmdからのsql直接入力が文字化けを引き起こしているということでしょうか。
tanat

2018/07/13 15:19

検証された内容を詳しく質問に追記してみて頂けますか?(コメント欄だと限界があり、状況が詳しくわからないので)
awa

2018/07/14 01:23

chcpして再検証した内容を質問欄に追記してみました。 お手数ですがご確認いただけますでしょうか。よろしくお願いいたします。
tanat

2018/07/14 03:41 編集

追記ありがとうございます。 今晩くらいにこちらの環境でも試してみますね。
tanat

2018/07/14 11:15

コマンドを実行する際にどのように実行しているかも記載してください。 (xamppのコントロールのshellでしょうか?)
tanat

2018/07/14 12:52

確認した限りだと、 xamppのコントロールパネルのshellから起動されるコマンドプロンプトからの文字入力及び出力がおかしい という事で間違いなさそうです。 具体的にどういう実装になっているか不明ですが、 https://qiita.com/ah-osoi/items/eeac878b06c300eb299f この辺りを参考にして文字コードをcp932に変更し、 コマンドプロンプトを直接起動して接続したらすでに正しく入っていることが確認されているデータも正しく表示されました。 方法は回答に追記しますが、正直かなり微妙なのでmysqlworkbenchやA5SQL:Mk-IIからSQLを発行するようにする方が良いと思います。
awa

2018/07/17 13:35

本当にいろいろとありがとうございます! 回答してくださったcp932にする方法で文字化けはなくなりました。 仕組みがわかっていないことも多く、tanatさんからのアドバイスもありますので、 MySQLのコマンドツールも利用する方法を採用しようと思います。 本当にありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問