20200325のMySQLに関する記事は3件です。

MySQLでインポートしたデータが文字化けした

はじめに

MySQL(厳密にはMariaDB)で、日本語を含むCSVファイルをインポートしたが、
select文でそれを表示させたところ、日本語部分が文字化けしてしまった。
不具合の詳細と、解決に向けて試したこと、解決策について備忘録も兼ねて記す。

環境

  • XAMPP
  • MariaDB
  • コマンドプロンプト

(バージョンなどは後述のように再インストールしたため不明。)

発生した不具合

tb2.csv
A106,中村,26
A107,田中,24
A108,鈴木,23
A109,村井,25
A110,吉田,27

というファイルをMariaDBで読み込んだ。

load data infile "db1\\tb2.csv" into table tb2 fields terminated by ",";

因みに、書き込むテーブルのカラムは以下。

bang varchar(10)
nama varchar(10)
tosi int

出力結果とエラー文

+------+--------+------+
| bang | nama   | tosi |
+------+--------+------+
| A106 | 荳ュ譚・|   26 |
| A107 | 逕ー荳ュ |   24 |
| A108 | 驤エ譛ィ |   23 |
| A109 | 譚台コ・|   25 |
| A110 | 蜷臥伐 |   27 |
+------+--------+------+

image.png

試したこと

再起動

XAMPP Control Panelの対応する箇所を再起動した。
具体的にはMySQLの行のStopボタンをクリック。
image.png

CSVファイルの文字コードを確認・書き換え

サクラエディタを使ってShift-JISやUTF-8に変更して保存し直し、インポートし直した。

データベースの設定を確認・書き換え

show variables like "chara%";

このコマンドを用いて、データベースに設定されているコマンドを確認した。
ここではVariable_nameがcharacter_set_databaseである項目のValueについて確認。

その後、

SET character_set_database=utf8

を使ってcharacter_set_databaseをUTF-8に書き換えた。
また"utf8"部分をcp932(=Shift JISに対応)にも書き換え、
それぞれに合わせてCSVファイルの文字コードもUTF-8やShift-JISに変更してみた。

my.iniファイルの書き換え

MariaDB上の、初期の文字コードを設定するものであるようだ。

ここなどを参照。

XAMPPを再インストール

ファイルが壊れた、バージョンが古いなどの原因かどうかを確かめる意図。
再インストール前のバージョンなどはメモし忘れた。

解決につながった方法

色々と試しすぎて、この方法のみによって解決したかと言われると確約はできないのだが
結論からいうと、不具合の原因はMySQL側ではなく、コンソール側に存在していたようだ。

MariaDBでファイルをインポートしたはいいものの、その文字コードをコマンドプロンプト上で取り扱うにあたって、
それがコマンドプロンプトで設定されている文字コードとは異なっていたため、文字化けが発生していた、という可能性がある。

解決に当たってCSVファイルの文字コードを散々変更して試しているので、
コマンドプロンプト上の設定文字コードとCSVファイルの文字コードが一致するパターンがあっても不思議ではない。
それならばもっと早い段階で問題が解決していてもおかしくはないはず。
従って、これだけが原因だったのかと言われると疑問が残る。

とはいえ、以下の方法で解決した。

コンソール(コマンドプロンプト)の文字出力に使用されている文字コードを変更する。
コンソール上で以下のコードを打ち込んだ。(数字65001はUTF-8に対応している)

chcp 65001
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

bundle installでmysql2のエラーが出たときに見る解決法

bundle installエラーが出た際、解決まで結構時間がかかってしまったので、まとめて置こうと思います。

エラー内容

実行コマンド
bundle install
//エラー
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
実行コマンド
bundle install
//エラー
Could not find gem 'sass-rails (>= 6)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.

原因

見てみるとどうやらlsslが見つけられないのが原因らしい。
エラーの内容の中にこのエラーがある人はこの記事の方法が役に立つかもしれません。
lsslが見つからないということらしい。

エラー原因
ld: library not found for -lssl

そもそもldってなに?

ldとは、GNUリンカーと呼ばれるコマンドで、コンパイルされたオブジェクトファイルから実行可能ファイル( またはライブラリ)を作成することができるものです。

続いて-lsslってなに?

mysql2 gemインストール時にldコマンドに与えられたオプションの一つで、libssl.dylibをライブラリ検索範囲から探してねって言うことらしいです。

解決

以下のコマンドを実行

実行コマンド
bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

実行コマンドの意味

実行コマンドが意味不明だったため、後で見てもわかるようにまとめておきます。

  • bundle config
    設定システムを編集します。

  • --local build.mysql2
    ローカルでmysql2をビルドした際に以下の通りビルドしてください。

  • --with-ldflags=-L/usr/local/opt/openssl/lib
    ビルドする際は以下を参照してください。
    参照先は-L/usr/local/opt/openssl/libです。

「今後ローカルでmysql2をインストールする場合は/usr/local/opt/openssl/libの場所を参照してくださいね」

って感じですかね。

参考記事

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

【Rails】MySQL2がbundle installできない時の対応方法
mysql2 gemインストール時のトラブルシュート
Ruby STUDIO

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

初心者|docker-compose|PHP+ Nginx + MySQL

docker-compose.ymlファイルだけでphp環境を簡単に構築できないかと思い、調べて見ました。(残念ながらdocker-compose.ymlファイルだけではダメでしたが...)

リスペクトな記事

この記事を作成するにあたり、参考にさせていただいた記事です。
本件、同様の既存記事を踏襲する内容となります。

DockerによるPHP開発環境構築(PHP + MySQL + Nginx)
Docker + Nginx + PHP-FPM なら40秒くらいで環境を準備できる docker-compose が楽しくなってきました。

したいこと

dockerを使って、ローカル環境でphpを使いたい

したこと

1) docker-compose.yml の用意

下記、コピペでOKです

docker-compose.yml
version: "3"
services:
  db:
    image: mysql:5.7
    volumes:
      - ./db/mysql:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_pass_fB3uWvTS

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    ports: ["8888:80"]
    depends_on: ["db"]

  php:
    image: php:7.4-fpm
    volumes:
      - ./nginx/html:/usr/share/nginx/html
      - ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
    depends_on: ["db"]

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/html:/usr/share/nginx/html
    restart: always
    ports: ["8080:80"]
    depends_on: ["php"]

2)とりあえず docker-compose up

docker-compose.ymlファイルのあるディレクトリでdocker-compose up -dしてみてください。エラーが出るはずです。

エラーが出たことを確認しましたらdocker-compose downで停止してください。

image.png

エラーが出た理由はnginx:サービスで使う default.conf ファイルがクライアント側に存在しないためです。

default.conf ファイルを用意する必要があります

3)【重要】 nginx用のdefault.confファイルの用意

default.conf ファイルを用意します。

default.conf
server {
    listen       80;
    server_name  localhost;
    root   /usr/share/nginx/html;
    index  index.php index.html;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ [^/]\.php(/|$) {
        fastcgi_pass php:9000;
        fastcgi_index index.php;    
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}

4) default.confファイルの保存先

上記の工程(2)でdocker-compose up -dをした後であれば、docker-compose.ymlファイルのあるディレクトリにnginx php dbという3つのディレクトリが生まれているはずです。

image.png

ディレクトリnginx / conf.dの中にdefault.confファイルを保存してください。

「default.conf」というディレクトリが先に存在している場合は、削除してください(入れ替えてください)

5)もう一度 docker-compose up

再度にdocker-compose up -dしてください。今回は上手く立ち上がったのではないでしょうか?

image.png

6)確認してみる

image.png

動作確認のため、ディレクトリnginx / htmlの中にindex.phpファイルをおいてください。(index.phpファイルの内容は何でも結構です)

index.phpの例
<?php
echo phpinfo();

ブラウザでhttp://localhost:8080/へアクセスして表示されれば確認完了です

image.png


補足

データベースとphpMyAdminは不要です

上記の docker-compose.yml には個人的な都合でmysqlとphpmyadminを入れておりますが、php環境を作る目的だけであれば不要なものです。
よってサービスdb:phpmyadmin:は削除いただいてOKです。ただし、削除する場合はサービスphp:内にあるdepends_on: ["db"]削除することを忘れないように。

もし、phpMyAdminへアクセスする場合はhttp://localhost:8888/です。
ユーザー名root、パスワードroot_pass_fB3uWvTSでログインできるはずです。

image.png

nginx−default.conf の記述について

こちらの参考サイトがとても勉強になりました。

参考サイト:nginx連載4回目: nginxの設定、その2 - バーチャルサーバの設定
参考サイト:nginx連載5回目: nginxの設定、その3 - locationディレクティブ

nginx と PHP-FPM の関係性について

こちらの参考サイトがとても勉強になりました。

参考サイト:nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する

FastCGIって何?

こちらの参考サイトがとても勉強になりました。

参考サイト:調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む