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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

2309閲覧

MySQLの文字コードの変更が行なえません

a2606

総合スコア22

MySQL

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

2クリップ

投稿2017/12/29 09:07

###UTF8に変更したいです。

Eclipseにて、JavaでSQL文(INSERT)を発行し、
文字列を追加したのですが、文字化けが発生しました。

ターミナルからMYSQLの文字コードを確認したところ、
下記のように「latin1」が設定されております。

mysql> show variables like "char%"; +--------------------------+-----------------------------------------------------------+ | Variable_name | Value | +--------------------------+-----------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql-5.7.20-macos10.12-x86_64/share/charsets/ | +--------------------------+-----------------------------------------------------------+

###発生している問題

そこで、my.cnfファイルに文字コードを変更する記載を追加し、
MySQLを再起動したのですが、
依然として上記の設定のままで、文字コードの設定が反映されておりません。

###my.cnfファイルの中身(全文)

# Default Homebrew MySQL server config [mysqld] character-set-server=utf8 # Only allow connections from localhost bind-address = 127.0.0.1 [client] default-character-set=utf8 [mysql] default-character-set=utf8

###試したこと
・他にmy.cnfファイルが存在するのではないかと、
下記のように検索を行いましたが「/usr/local/etc/my.cnf」以外には、
存在しないように見受けられます。

$ find /usr -name "my.cnf" /usr/local/etc/my.cnf find: /usr/sbin/authserver: Permission denied

・mysqlを実行する際に、「--defaults-file=/usr/local/etc/my.cnf」
を追加した場合においても、設定は反映されておりませんでした。

・Javaのソース内で、getConnectionメソッドの引数のURLに、
「?useUnicode=true&characterEncoding=utf8」の記載を加えた場合においては、
文字化けすることなく、文字列を追加できることを確認しております。

###補足情報
OS : macOS High Sierra (10.13.2)
IDE : Eclipse Oxygen.1a Release (4.7.1a)
MySQL : Ver 14.14 Distrib 5.7.20, for macos10.12 (x86_64) using EditLine wrapper

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

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

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

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

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

guest

回答2

0

character_set_databaseは現在参照しているデータベースの文字セットです。
変更するにはデータベースを作成し直す必要があります。

追記

以下のコマンドでも変更できますが、既に存在するテーブルやカラムの文字セットも変更する必要があるため、作成し直した方が早いです。

SQL

1> alter database <your database> character set utf8;

尚、試す前に元に戻せるように、必ずバックアップを取って下さい。

投稿2017/12/29 09:34

編集2017/12/29 09:40
hichon

総合スコア5737

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

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

a2606

2017/12/29 13:43

回答ありがとうございます。 「character_set_database」は、「use」で選択中(未選択なら"mysql")のデータベースの設定を指していたんですね。 反映されない原因は、自身のmy.cnfファイルが読み込む場所の範囲外にあった為でしたが、 おかげさまで、その後の設定で躓かずに済みました。 そして、重ねての質問で申し訳ありません。 自身で作成したデータベースに関しては、新たに作成、変更するのは容易でしたが、 MySQLに初めから存在するデータベース(mysql)などは、 どのように設定し直すのが一般的なのでしょうか?
hichon

2017/12/29 14:00 編集

こんな手順でやります。バックアップはデータの重要度に応じて適当に実施 mysqldumpに-n -tオプションを付けてデータのみをダンプ、 別名で新しいデータベースを作成し、ダンプしたデータをインポート 新しいデータベースを参照するように、アプリの設定を変更 動作確認後、古いデータベースを削除
hichon

2017/12/29 14:04

注意: mysqldumpに-n -tオプションを付けない場合、データベースとテーブルの作成DSLがダンプに書き出されますが、これには文字セットの指定が含まれているため、そのままインポートすると元の文字セットでデータベースが作り直されてしまいます。
a2606

2017/12/29 17:34

回答いただいた「別名で新しいデータベースを作成」につきまして、こちらはテーブルの作成も含まれるのでしょうか? -n -tオプションを使用した場合、データベース・テーブルともにCREATEが実行されないため、テーブルも自身の手で予め用意する必要があるという認識です。
guest

0

自己解決

$ mysql --help | grep my.cnf order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

上記のコマンドで、my.cnfファイルの読み込み順を確認した所、
私の所持しているmy.cnfのパス「/usr/local/etc/my.cnf」は上記4つのいずれにも属しておりませんでした。

その為、my.cnfファイルをコピーし「/usr/local/mysql/etc」で新たに作成してみると、
my.cnfファイルに記載した文字コードの設定が反映され、SQL文発行時の文字化けも解消致しました。

しかしながら、既存のデータベースにおきましては、
hichonさんの回答にある通り、デフォルト文字コードを変更する前に作られている為、
mysqldumpでバックアップを取った後に、文字コードの変更を行う必要がありました。

投稿2017/12/29 13:01

a2606

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問