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

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

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

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

MariaDB

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

Q&A

解決済

3回答

12906閲覧

MariaDBのテーブルに日本語のデータがいれられません。

kasotama

総合スコア35

SQL

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

MariaDB

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

2グッド

3クリップ

投稿2016/02/02 06:52

編集2016/02/02 07:09

こんにちは。プログラミングを始めて2か月程度の初心者です。
今現在MariaDBのテーブルに日本語のデータを登録しようとしているのですが、????と表示されてしまい上手くいきません。調べてみたところデータベースの文字コードがおかしいのではないかと思い試してみましたが、すべてUTF-8になっているのにも関わらずやはりできませんでした。
英数字だけで登録する分には問題なのですが、日本語だとうまくいきません。

###ソースコード

SQL

1MariaDB [test]> show variables like 'character%'; 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 | 12| character_sets_dir | C:\xampp\mysql\share\charsets\ | 13+--------------------------+--------------------------------+ 14 15INSERT INTO mylogin(addres,pass,name) VALUES('kato@gmail','kato123','加藤'); 16+------------+---------+------+ 17| address | pass | name | 18+------------+---------+------+ 19| kato@gmail | kato123 | ???? | 20+------------+---------+------+ 21 22MariaDB [test]> show table status; 23+---------+--------+---------+------------+------+----------------+------------- 24+-----------------+--------------+-----------+----------------+----------------- 25----+-------------+------------+-----------------+----------+----------------+-- 26-------+ 27| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length 28| Max_data_length | Index_length | Data_free | Auto_increment | Create_time 29 | Update_time | Check_time | Collation | Checksum | Create_options | C 30omment | 31+---------+--------+---------+------------+------+----------------+------------- 32+-----------------+--------------+-----------+----------------+----------------- 33----+-------------+------------+-----------------+----------+----------------+-- 34-------+ 35| mylogin | InnoDB | 10 | Compact | 2 | 8192 | 16384 36| 0 | 0 | 0 | NULL | 2016-02-02 13:33 37:54 | NULL | NULL | utf8_general_ci | NULL | | 38 | 39+---------+--------+---------+------------+------+----------------+------------- 40+-----------------+--------------+-----------+----------------+----------------- 41----+-------------+------------+-----------------+----------+----------------+-- 42-------+

###補足情報(言語/FW/ツール等のバージョンなど)
MariaDBを使っています。

teracot, Toritaus👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

ターミナルが使用している文字コードがutf8でないため文字化けしています。
katomasaさんの場合、日本語(cp932)を入力しているのに、SQLはutf8を受け取ると設定しているので、思う通りに処理されないのだと思います。

SQLで日本語(cp932)を入力

character_set_client: SQLを実行する時の文字コード(utf8)

character_set_connection: この文字コードに変換(utf8)

character_set_results: 結果を返すときの文字コード(utf8)

表示(cp932)

投稿2016/02/02 10:12

編集2016/02/03 03:40
coba-coba

総合スコア1409

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

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

kasotama

2016/02/03 01:24

わかりやすい解説ありがとうございます。 コマンドプロンプトの設定をUTF-8に変えてみましたが、そうすると今度は日本語の入力自体ができなくなってしまいました。 また、コマンドプロンプトから打ち込むのではなく、サーブレットからデータベースに接続して入力してみてもやはり文字化けとなってしまいました…
coba-coba

2016/02/03 12:09 編集

上記回答で一部不適切だったと思う部分を削除しました。 環境はWindowsですよね。ベストかは分かりませんが、以下にWindowsでのやり方を書いていきます。 それと、文字コードの変更の仕方はご存じのようなので、割愛します。 Windowsのコマンドプロンプトを使ってMariaDBと日本語をやり取りする場合、次の3つの文字コードをcp932にします。 character_set_client character_set_connection character_set_results コマンドプロンプトでutf8を表示できるようにしても、katomasaさんのおっしゃる通り、日本語の入力ができなくなります。 なので、上記の文字コードをcp932にすることで、入出力を日本語で行えるようにします。 なお、MariaDBでの処理はutf8で行いたいので、上記3つ以外は、katomasaさんがご質問中に書いている文字コードのままとしてください。 私も詳細は理解できていないのですが、上記3つがcp932で、他がutf8でも、うまい具合に変換してくれるようです。 次に、MariaDBを再起動してから、データベースとテーブル、カラムをutf8指定で作成します。 これは、次の3つがutf8なら指定しなくても自動的にutf8になります。 character_set_database character_set_server character_set_system 最後に、コマンドプロンプトからMariaDBにログインして、次のSQLを投げてみてください。 INSERT INTO mylogin(addres,pass,name) VALUES('kato@gmail','kato123','加藤');
kasotama

2016/02/03 08:19

ありがとうございます!coba-cobaさんのおっしゃる通りの方法で解決できました! とても時間はかかってしまいましたが文字コードというものの勉強にもなり良い経験ができました。本当にありがとうございました!
coba-coba

2016/02/03 11:28

2ヵ月でそれだけできてすごいですね。 解決してよかったです。
guest

0

MariaDBについては詳しくないのですが・・・
データベースへの入力はコンソールから行ってるのでしょうか?
character_sets_dirがC:\xampp\mysql\share\charsets
ということはWindowsで走ってるんでしょうか?
データベースへ入力しているアプリケーションがSHIFT_JISを利用している可能性があります。

投稿2016/02/02 09:48

mankan

総合スコア187

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

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

kasotama

2016/02/03 01:21

そうだったみたいなのでコマンドプロンプトの設定をUTF-8にしてみましたが、今度は日本語を入力するとなぜかコマンドプロンプトが落ちてしまいました…
mankan

2016/02/03 05:06

詳しくはないのですが、私もUTF-8表示はできても、UTF-8入力は諦めた経験があります・・・。 MariaDBへcp932で入出力する方法をcoba-cobaさんが提示されているので、 OBDCというアプローチを提示しようと思います。 データベースに接続する際にODBCを経由することで、 ACCESSやOpenOficeBase等のクライアントから接続することができます。 正しく設定すればODBCが文字コード変換してくれます。 OBDCがUTF-8に変換するのでMariaDBへUTF-8入出力できます 他のPCからMariaDBへ接続する際にも活躍します。
kasotama

2016/02/03 08:21

わざわざほかのやり方も教えてくださってありがとうございました!こんな方法もあるのかとすごく勉強になりました!今回はcoba-cobaさんのやり方でできてしまいましたが、せっかくなので練習にこのやり方も試してみたいと思います。ありがとうございました!
guest

0

MariaDBについては詳しくないのですが、
このあたり
など参考になりませんか?

投稿2016/02/02 08:06

Alice0225

総合スコア206

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

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

kasotama

2016/02/03 03:58

せっかく回答していただいたのに気づかなくてすみませんでした。 そのページのことも昨日試してはいたんですが、それでも上手くいきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問