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

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

ただいまの
回答率

88.61%

MySQLが文字化けするが、my.cnfの設定方法が分からない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,402

Alek3

score 7

JavaでWebアプリケーションを作っていますが、日本語のデータを挿入すると「?」に置換されてしまいます。

色々試行錯誤しましたが、うまくいきません。OSはmacOS High Sierraです。

◆MySQL 設定

$ MySQL --version
MySQL  Ver 14.14 Distrib 5.7.21, for macos10.13 (x86_64) using  EditLine wrapper

◆文字コード設定
ここの設定のlatin1がutf8になれば、問題が解決すると思っています。

mysql> show variables like 'character%';
+--------------------------+-----------------------------------------------------------+
| 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.21-macos10.13-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+

◆my.cnfについて
文字化けの解消方法について検索すると、my.cnfに設定を追記すればいいという記事が多いですが、そもそもmy.cnfがどこにも存在しませんでした。具体的には、

$ 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を追加してもうまくいかない。
調べてもmy.cnfはあるのが当然なようで、なかなか丸ごとコピーできるところは見つからなかったのですが、結局以下のファイルを作成しました。
参考: https://www.karakaram.com/install-mysql56-homebrew#my-cnf

[client]
port = 3306
socket = /tmp/mysql.sock

[mysql]
show-warnings
#safe-updates
prompt = '[\d] mysql> '

[mysqld]
# basic
datadir = /usr/local/var/mysql
tmpdir = /tmp
port = 3306
socket = /tmp/mysql.sock
character-set-server = utf8
default-storage-engine = InnoDB
explicit_defaults_for_timestamp = 1
lower-case-table-names = 2

# max connections
max_connections = 64
# table_open_cache = max_connections * tables used in one transaction + alpha
table_open_cache = 800
# table_definition_cache = all tables in mysql + max_connections + alpha
table_definition_cache = 400
# open_files_limit = table_open_cache * 1.4
open_files_limit = 1120

# global buffer
key_buffer_size = 16M
query_cache_type = 0
# innodb_buffer_pool_size = available memory for Mysql * 0.7
innodb_buffer_pool_size = 256M

# thread buffer
read_buffer_size = 256K
read_rnd_buffer_size = 512K
join_buffer_size = 256K
sort_buffer_size = 512K

# InnoDB
innodb_file_per_table
innodb_autoextend_increment = 64
innodb_log_files_in_group = 2
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_flush_neighbors=0
#innodb_flush_method=O_DIRECT
innodb_thread_concurrency = 2
innodb_commit_concurrency = 2

# log
general_log = 0
slow_query_log = 0

[mysqldump]
max_allowed_packet = 16M
quick
set-charset
single-transaction

これを上記の四箇所のいずれかに配置すればいいと思い、試しました。手順としては、ファイルを配置→システム環境設定のMySQL内でStop MySQL Server→Start MySQL Serverです。
補足ですが、インストールにHomebrewを使いませんでした。

しかし、~/.my.cnfに配置しても、特に変化はありませんでした。その他の三箇所については、そもそもMySQLが再起動しなくなりました。

解決したいのは文字化けの問題です。よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • m.ts10806

    2018/12/27 09:46

    my.iniではないのでしょうか。

    キャンセル

  • Alek3

    2018/12/27 12:28

    OSがMacなのでmy.iniではないと思ったのですが誤りでしょうか?

    キャンセル

  • m.ts10806

    2018/12/27 12:32

    あ、失礼しました。
    例えばmy- でgrepしても見つかりませんか?
    デフォルトではmy-develop.cnfとかで入るはずなので。

    キャンセル

回答 1

checkベストアンサー

+1

多分、起動しなくなった場所が設置場所として正解です。
多分、

datadir = /usr/local/var/mysql
socket = /tmp/mysql.sock


とかのあたりが、正しくない場所を指しているんでしょう。

ps aux | grep mysql


とかで、socketの場所とか見て、その場所を指定すれば通るんじゃないですかね。

で、今ある(はず)のmy.cnfについては

find / -name "my*.cnf"


とかで探してみたらどうでしょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/12/27 16:34

    datadirを `/usr/local/mysql/data/` に変更し、以前は動かなくなった場所( `/usr/local/mysql/etc/my.cnf` )に格納したところ、無事文字化けが解消されました。断片的な情報の中、お答えいただきありがとうございました!

    なお、元々のmy.cnfやそれに準ずるものは結局見つかりませんでした。

    キャンセル

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

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

関連した質問

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