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

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

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

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

文字コード

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

Q&A

解決済

1回答

11015閲覧

mysqlで漢字が文字化けしてしまう理由

aaaaaaaa

総合スコア501

MySQL

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

文字コード

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

0グッド

0クリップ

投稿2017/04/28 10:16

windowsのmysql(Ver14,14 distrib5.6.16)を利用しているとき、漢字の入ったレコードを挿入しようとすると以下のように?が表示されてしまいます。
因みに記憶だ正しければ、2と3のaaは、「田」で4のaaが「西沢」と記述したはずです。

mysql

1mysql> select * from renzoku; 2+-----+------+ 3| ren | aa | 4+-----+------+ 5| 2 | ? | 6| 3 | ? | 7| 4 | ?? | 8+-----+------+ 93 rows in set (0.00 sec)

テーブルの構造は、こうなっております。

mysql

1mysql> desc renzoku; 2+-------+-------------+------+-----+---------+----------------+ 3| Field | Type | Null | Key | Default | Extra | 4+-------+-------------+------+-----+---------+----------------+ 5| ren | int(11) | NO | PRI | NULL | auto_increment | 6| aa | varchar(10) | YES | | NULL | | 7+-------+-------------+------+-----+---------+----------------+ 82 rows in set (0.01 sec)

文字コードが原因なのかと思い調べてみたところ

mysql

1mysql> show variables like "chara%"; 2+--------------------------+--------------------------------+ 3| Variable_name | Value | 4+--------------------------+--------------------------------+ 5| character_set_client | cp932 | 6| character_set_connection | cp932 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | cp932 | 10| character_set_server | utf8 | 11| character_set_system | utf8 | 12| character_sets_dir | C:\xampp\mysql\share\charsets\ | 13+--------------------------+--------------------------------+ 148 rows in set (0.01 sec)

となりました。しかし今現在利用している漢字が?となってしまうDBとは、別のDBで漢字を入力すると以下のようになります。

mysql

1mysql> select * from tb1; 2+------+------+------+ 3| bang | nama | tosi | 4+------+------+------+ 5| A101 | 佐藤 | 40 | 6| A102 | 高橋 | 28 | 7| A103 | 中川 | 20 | 8| A104 | 渡辺 | 23 | 9| A105 | 西沢 | 35 | 10| A106 | 西沢 | 38 | 11| A107 | 田 | 38 | 12+------+------+------+ 137 rows in set (0.00 sec)

つまり**?にならず入力したとおりに漢字が表示されます。上手くいかなかった方は、いくら漢字を入力しても「?」**ですがこちらは、記述したとおりの漢字が表示されます。
この漢字がかならず表示される方の構造はこうなっております。

mysql

1mysql> desc tb1; 2+-------+-------------+------+-----+---------+-------+ 3| Field | Type | Null | Key | Default | Extra | 4+-------+-------------+------+-----+---------+-------+ 5| bang | varchar(10) | YES | | NULL | | 6| nama | varchar(10) | YES | | NULL | | 7| tosi | int(11) | YES | | NULL | | 8+-------+-------------+------+-----+---------+-------+ 93 rows in set (0.00 sec)

なぜ、一方では、上手く漢字が表示されているのにもかかわらず、もう一方では、表示されないのでしょうか。

※因みに漢字が表示されている方も嘗て文字コードに問題があったみたいで、いくら文字を入力しても**「?」**どころか何も表示されない状態でしたがこちらで解決し、何とか漢字が表示できるようになったのですが、今回は、上手くいくDBといかないDBが混在している状態です。

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

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

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

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

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

A-pZ

2017/05/18 04:28

文字化けが発生していないDBでのキャラクタセットの情報(show variables like "chara%";)が書かれていませんが、比較されていますでしょうか。
guest

回答1

0

ベストアンサー

デフォルトだけでなく、DB と テーブルの設定も確認してみて下さい。

use db_example; show variables like "chara%"; と show create table table_example;

多分ですが、デフォルトの変更前に作成したDBで文字化けが発生し、変更後に作成したDBで正常動作しているのではないかと思います。

投稿2017/04/28 10:46

編集2017/04/28 17:58
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

aaaaaaaa

2017/05/01 10:42

ご回答有難うございます。 教えていただいた、「show create table テーブル名」を行ってみると日本語を入力しても上手くいくテーブルと上手くいかないテーブルに違いが二つありました。上手くいく方のテーブルのdefault_charsetは、utf8なのに対し、上手くいかない方は、latin1となっておりました。 こちらは、alter table 上手くいかないテーブル default charset=utf8;でutf8になりました。しかしこの変更を施したところ、 「show create table テーブル名」で得られた情報が、変更を施す前が、「`aa` varchar(10) DEFAULT NULL,」だったのに対し、変更を施すと「`aa` varchar(10) CHARACTER SET latin1 DEFAULT NULL,」のようになりました。しかし、「alter table renzoku default CHARACTER SET=utf8;」としてみても変化がなく、どうすればこのlatin1をutf8に変更できるのかが解かりません。
aaaaaaaa

2017/05/10 10:39

ご返答有難うございます。提示して下さったsql文を実行してみると、 mysql> alter table renzoku character set utf8 collate utf8_general_ci; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table renzoku; +---------+------------------------------------------------------------- ----------------------------------------------------------+ | Table | Create Table | +---------+------------------------------------------------------------- ----------------------------------------------------------+ | renzoku | CREATE TABLE `renzoku` ( `ren` int(11) NOT NULL AUTO_INCREMENT, `aa` varchar(10) CHARACTER SET latin1 DEFAULT NULL, PRIMARY KEY (`ren`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 | と、なりカラムaaは、latin1のまま変更できませんでした。
tacsheaven

2017/05/18 04:26

alter table renzoku convert to character set utf8 collate utf8_general_ci; だとどうなるでしょうか。
second

2017/05/18 04:33

データベースとテーブルだけでなく、カラムの文字コードも変える必要があると思いますよ。 `ALTER TABLE テーブル名 MODIFY カラム名` の構文を使用して、カラムの文字コードもutf8に変更してみてください。
aaaaaaaa

2017/05/19 09:10

te2jiさん、secondさん、ご回答有難うございました。無事、文字化けを治せました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問