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

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

ただいまの
回答率

88.03%

MariaDBでDBを作成した際にINSERTしたデータが文字化けします。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,351

score 12

前提・実現したいこと

簡単なテーブルを作成して、データを入れる練習をしていたのですが、
INSERTした際に入力した2バイト文字が文字化けしてしまいます。
・my.iniの変更点
[mysqld]
character-set-server = utf8
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8

発生している問題・エラーメッセージ

INSERTしたデータの2バイト文字が文字化けしてしまい、
データの中身が確認できません。

エラーメッセージ
```

該当のソースコード

create table goods(id INT UNSIGNED NOT NULL AUTO_INCREMENT,
goods_name varchar(100),
price INT(11),
PRIMARY KEY(id) ) default charset=utf8;

insert into goods(goods_name, price) values('あああ',123);

select * from goods;

試したこと

・データベースの作成しなおし
・テーブルの作成しなおし
・my.iniを変更した際にMySQL(MariaDB)の再起動

補足情報(言語/FW/ツール等のバージョンなど)

OS/Windows10
使用ツール/
XAMPP v3.2.2
mysql  Ver 15.1 Distrib 10.1.13-MariaDB, for Win32 (AMD64)

Connection id:          2
Current database:       test1
Current user:           **@localhost
SSL:                    **

Using delimiter:        ;
Server:                 MariaDB
Server version:         10.1.13-MariaDB mariadb.org binary distribution
Protocol version:       **
Connection:             localhost via TCP/IP
Insert id:              1
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               ****
Uptime:                 18 min 4 sec
※アスタリスクの部分は正常な値が入っていますが、隠しています。
他にも必要な情報がありましたら教えて下さい。

2016/06/22 10:47追記
MariaDB [test1]> DESC goods;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| goods_name | varchar(100)     | YES  |     | NULL    |                |
| price      | int(11)          | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
DESC goods;を実行した結果になります。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tanat

    2016/06/22 10:41

    DESC goods;
    でgoodsテープルの定義を表示し、追記してみてもらえますか?

    キャンセル

  • echo

    2016/06/22 10:49 編集

    >tanat様
    情報ありがとうございます。
    今追記いたしましたので、ご確認ください。

    キャンセル

回答 3

checkベストアンサー

+1

私もMySQL+コマンドプロンプトでさんざん苦労したので、もうコマンドプロンプトからSQL文を直接入力することはしていないですが、お試しいただく価値があるのは、接続後に
set character_set_client=cp932;
を入力してから操作する方法です。
my.iniに書いたりクライアントの起動オプションに指定したりしてもうまくいかなかった場合も、これで行けたことがあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/22 12:35

    >dupont_kedama様
    ご回答有り難うございます。
    set (省略) =cp392;は実は別な方の回答のURLに乗っていまして、
    そちらは試したんです…ごめんなさい
    現在も下記のように文字化けしたままなんです…。

    MariaDB [test1]> status;
    --------------
    mysql Ver 15.1 Distrib 10.1.13-MariaDB, for Win32 (AMD64)

    Connection id: 10
    Current database: test1
    Current user: tatsu@localhost
    SSL: Not in use
    Using delimiter: ;
    Server: MariaDB
    Server version: 10.1.13-MariaDB mariadb.org binary distribution
    Protocol version: 10
    Connection: localhost via TCP/IP
    Server characterset: utf8
    Db characterset: utf8
    Client characterset: cp932
    Conn. characterset: utf8
    TCP port: 3306
    Uptime: 1 hour 24 min 31 sec

    Threads: 3 Questions: 204 Slow queries: 0 Opens: 3 Flush tables: 1 Open tables: 14 Queries per second avg: 0.040
    --------------

    MariaDB [test1]> insert into goods(goods_name, price) values('あああ',123);
    Query OK, 1 row affected (0.03 sec)

    MariaDB [test1]> select*from goods;
    +----+------------+-------+
    | id | goods_name | price |
    +----+------------+-------+
    | 1 | ?????? | 123 |
    | 2 | ?????? | 456 |
    | 3 | ?????? | 456 |
    | 4 | ???????? | 456 |
    | 5 | 縺ゅ≠縺・| 123 |
    +----+------------+-------+
    5 rows in set (0.00 sec)

    キャンセル

  • 2016/06/22 12:49

    すみません、再度今
    set character_set_client=cp932;
    set character_set_database=cp932;
    set character_set_server=cp932;
    を実行して
    MariaDB [test1]> status;
    --------------
    mysql Ver 15.1 Distrib 10.1.13-MariaDB, for Win32 (AMD64)

    Connection id: 10
    Current database: test1
    Current user: tatsu@localhost
    SSL: Not in use
    Using delimiter: ;
    Server: MariaDB
    Server version: 10.1.13-MariaDB mariadb.org binary distribution
    Protocol version: 10
    Connection: localhost via TCP/IP
    Server characterset: cp932
    Db characterset: cp932
    Client characterset: cp932
    Conn. characterset: utf8
    TCP port: 3306
    Uptime: 1 hour 35 min 58 sec

    Threads: 3 Questions: 233 Slow queries: 0 Opens: 3 Flush tables: 1 Open tables: 14 Queries per second avg: 0.040
    --------------

    この状態にしたところ、無事文字化けが解除されました。

    MariaDB [test1]> insert into goods(goods_name, price) values('えええええ',101010);
    Query OK, 1 row affected (0.02 sec)

    MariaDB [test1]> select*from goods;
    +----+------------+--------+
    | id | goods_name | price |
    +----+------------+--------+
    | 1 | ?????? | 123 |
    | 2 | ?????? | 456 |
    | 3 | ?????? | 456 |
    | 4 | ???????? | 456 |
    | 5 | あああ | 123 |
    | 6 | えええええ | 101010 |
    +----+------------+--------+
    6 rows in set (0.00 sec)

    ありがとうございました。

    キャンセル

+1

ヒントになりそうな回答が以前ありましたので紹介します。
SQL - MariaDBのテーブルに日本語のデータがいれられません。(26236)|teratail

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/22 11:05

    ご丁寧にリンクまでありがとうございます。
    先ほど、URLにあるやり方である

    >Windowsのコマンドプロンプトを使ってMariaDBと日本語をやり取りする場合、次の3つの文字コードをcp932にします。
    character_set_client
    character_set_connection
    character_set_results
    を試してみましたが、やはり文字化けしてしまっているようです。

    以下実行結果など

    MariaDB [test1]> show variables like 'character%';
    +--------------------------+--------------------------------+
    | Variable_name | Value |
    +--------------------------+--------------------------------+
    | character_set_client | utf8 |
    | character_set_connection | cp932 |
    | character_set_database | utf8 |
    | character_set_filesystem | binary |
    | character_set_results | cp932 |
    | character_set_server | cp932 |
    | character_set_system | utf8 |
    | character_sets_dir | C:\xampp\mysql\share\charsets\ |
    +--------------------------+--------------------------------+

    MariaDB [test1]> drop database test1;
    Query OK, 1 row affected (0.16 sec)

    MariaDB [(none)]> create database test1 default character set utf8;
    Query OK, 1 row affected (0.03 sec)

    MariaDB [test1]> create table goods(id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    -> goods_name varchar(100),
    -> price INT(11),
    -> PRIMARY KEY(id) ) default charset=utf8;
    Query OK, 0 rows affected (0.15 sec)

    MariaDB [test1]> insert into goods(goods_name, price) values('あああ',123);
    Query OK, 1 row affected (0.04 sec)

    MariaDB [test1]> select * from goods;
    +----+------------+-------+
    | id | goods_name | price |
    +----+------------+-------+
    | 1 | ?????? | 123 |
    +----+------------+-------+
    1 row in set (0.00 sec)

    キャンセル

0

Windowsでやられているとのことなので、ソースがSJISでやられていてそれをUTF-8のMariaDBに入れようとしていて文字化けでエラーになっていないでしょうか?コンソール上からではなくMySQLWorkBenchのようなクライアントソフトから試されては如何でしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/22 12:38

    >mryo0826様
    ご回答有り難うございます。
    MySQLWorkBench入れてみました。
    INSERT文実行後のテーブルの中身を表示することができてないませんが…。
    結果表示することが出来ましたら再度ご連絡いたします。

    キャンセル

  • 2016/06/22 15:46

    MySQLWorkBenchでテーブルの中身を確認するのはこんな感じです。
    http://yoshinin.blog.fc2.com/blog-entry-85.html

    キャンセル

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

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る