20200207のMySQLに関する記事は7件です。

xamppからmysql利用時の文字化け問題

恐竜名文字化け問題

mysql_select_result_ng.jpg

show create table テーブル名;コマンドで文字コードを確認。
ラテン語になっている。

mysql_select_result_ng2.jpg

2.解決策

(1).[mysqld]の編集

my.iniファイルの[mysqld]セクションの最後の「## UTF 8 Settings」を探す

変更前

## UTF 8 Settings
#init-connect=\'SET NAMES utf8\'
#collation_server=utf8_unicode_ci
#character_set_server=utf8
#skip-character-set-client-handshake
#character_sets-dir="C:/xampp/mysql/share/charsets"

↓utf-8に関する下記部分をコメントアウトする。

変更後

## UTF 8 Settings
init-connect='SET NAMES utf8'
collation_server=utf8_unicode_ci
character_set_server=utf8
skip-character-set-client-handshake
character_sets-dir="C:/xampp/mysql/share/charsets"

(2).次に[client][mysqldump][mysql]の各最後に次の行を追加する。

default-character-set=utf8mb4

[client] 
# password       = your_password 
#port            = 3306
port            = 3308  
socket          = "C:/xampp/mysql/mysql.sock"
#下記を追記
default-character-set=utf8mb4
[mysqldump]
quick
max_allowed_packet = 16M
#下記を追記
default-character-set=utf8mb4
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
#下記を追記
default-character-set=utf8mb4

(3).作成済みテーブルの文字コードの変更

下記コマンドで、文字コードを変更。

ALTER TABLE tbl_dino CONVERT TO CHARACTER SET utf8mb4;

MariaDB [db_dino]> show create table tbl_dino;
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                                                                    |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tbl_dino | CREATE TABLE `tbl_dino` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `dname0` varchar(100) DEFAULT NULL,
  `type0` varchar(50) DEFAULT NULL,
  `n_src1` int(11) DEFAULT NULL,
  `type1` varchar(50) DEFAULT NULL,
  `n_src2` int(11) DEFAULT NULL,
  `type2` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [db_dino]>

参考url

XAMPPの文字化け回避メモ
my.iniファイルの確認と修正

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

初心者によるプログラミング学習ログ 232日目

100日チャレンジの232日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。

100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。

232日目は

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

VirtualBox内のMySQL接続

はじめに

VirtualBoxにセットアップしたMySQLに接続する手順を記述します

目的

同じマシン内に異なるMySQLバージョン(5系と8系)を共有する際に使用します

前提事項

  • VirtualBox及びVagrantを使用します
  • DB接続確認はMySQL Workbenchやphpで行います

VirtualBox内のMySQL接続

以下の環境構成になります。
環境構成イメージ.png

Vagrantファイル作成

Vagrantを使用して仮想マシンを作成するため
マシン構成等をファイルに定義します

Vagrantfile
Vagrant.configure("2") do |config|
  # Ubuntuのboxを指定する
  config.vm.box = "bento/ubuntu-18.04"
  # private networkのIPを指定する
  config.vm.network "private_network", ip: "192.168.33.10"
  # ポートフォワードを指定する
  config.vm.network "forwarded_port", guest: 3306, host: 33060
end

仮想マシン作成

vagrant upコマンドを実行してプロビジョニングします

MySQLセットアップ

「【Ubuntu 18.04 LTS Server】MySQLサーバを動かす」を参照ください

MySQL接続するポイントしてbind-address設定は必ず行ってください

#すべて許可する場合はコメントアウトします
#bind-address = 127.0.0.1

#IP=0.0.0.0もすべての接続が許可されます
bind-address = 0.0.0.0

MySQL接続確認

MySQL Workbenchの場合

MySQL Workbench

項目
Hostname localhost
Port 33060(※ポートフォワードのポートと合わせます)
Username Mysqlのユーザ名
Password Mysqlのパスワード

PHPの場合

<?php
    $link = mysqli_connect('localhost', 'user', 'password', 'db', '33060');

    // 接続状況をチェックします
    if (mysqli_connect_errno()) {
        die("DB接続できません:" . mysqli_connect_error() . "\n");
    } else {
        echo "DB接続に成功しました。\n";
    }
?>
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【DBeaver】【MySQL】Error: access denied for user 'root'@'localhost'の対処法

概要

そもそもDBeaverとは

マルチプラットフォーム対応のデータベースGUIツールで MySQL, PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Derby など、多くのデータベースに対応しています。
Enterprise Edition では MongoDB, InfluxDB, Apache Cassandra, Redis, Apache Hive など NoSQL / BigData database にも対応しています。

TeamSQL もいいけど、 DBeaver もいいぞより引用

今回、DBeaverからMySQLにアクセスしようとしたらタイトルに書いてあるエラーが出て、それが解決できたので自分がやったやり方を書きたいと思う。

環境

DBeaver 6.3.0
MySQL 5.7
Windows10

原因

ざっくり言うとMySQLにsudo無しでログインできるようにしたら解決した。
そもそも自分はMySQLにsudo無しでログインできるようになっていなかったのでそれが原因だった。

やり方

ほぼこの記事の通りにやった。
MySQL5.7でsudo無しでrootログイン

自分は途中でつまづいたところがあったので一応説明したいと思う。
まずはMySQLにsudoを使ってログインする。

sudo mysql -u root -p

MySQLにログインしたら下記コマンドを実行する。
'で囲まれたpasswordは自分で設定したものを打ち込む。
パスワードが生で見えるのでちょっと怖い。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

それで自分はこれを実行したら下記のエラーが出た。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

自分はvalidate password プラグインを入れていたのでこのエラーが起こってしまった。なのでこれを取り除きたいと思う。
MySQLで以下を実行する。

mysql> uninstall plugin validate_password;

消せたかどうかはこれで確認できる。

mysql> SHOW VARIABLES LIKE 'validate_password%';
Empty set (0.00 sec)

最後に設定を反映するコマンドを実行して終了。

mysql> FLUSH PRIVILEGES;

以下を実行して入れたらsudo無しログイン成功

mysql -u root -p

これで自分はDBeaverからMySQLに接続できるようになりました。

参照元

TeamSQL もいいけど、 DBeaver もいいぞ
MySQL5.7でsudo無しでrootログイン
MySQL5.7のvalidate_passwordとかいうクソ機能殺す

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

Ubuntu + Node.js + Express の環境から、外部DB(MySQL)へ接続しデータを表示する

前回、Expressの環境は作ったので、その環境で作業する。

MySQL をインストールする

Expressの環境にMySQLデータベースを置くんじゃなくて、参照用に必要。

npm install mysql --save

test.js を作る

app.js 作ってたフォルダ内で、test.js を作る

test.js
const mysql = require('mysql');

const con = mysql.createConnection({
  host: '192.168.123.223',
  user: 'root',
  password: 'root',
  database: 'test_database'
});

con.connect((err) => {
  if (err) throw err;
  console.log('Connected');
  con.query('select * from test_table', function (error, results, fields) {
    if (error) throw error;
    console.log(results[0]);
  });
});

node.js で実行

  • node test.js を起動

うまく接続出来れば、↓のようになるはず。

$ node test.js
Connected
RowDataPacket {
  id: 1,
  name: 'TOM',
  created_at: 2020-02-05T15:00:00.000Z,
  updated_at: 2020-02-05T15:00:00.000Z
}
  • 接続できなくてエラーになった場合
    • Vagrantfile に config.vm.network "private_network", ip: "192.168.123.223" が記載されているか?
    • 特に Vagrantfile をいじくって無ければ、この設定だけで接続できる。
      • Vagrantfile については、コレを参照してください。
      • VirtualBox の設定で言うと、「NAT」と「ホストオンリーアダプター」の2種類のネットワーク設定が必要

app.js を修正する

前回作った app.js を修正して、MySQLのデータを参照する

app.js
var express = require('express');
var app = express();

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : '192.168.123.223',
  user     : 'root',
  password : 'root',
  database : 'test_database',
  debug    : false,
});

app.get('/', function (req, res) {
  connection.connect();
  connection.query('select * from test_table', function (error, results, fields) {
    if (error) {
      connection.end();
      throw error;
    }
    res.send(results[0]);
  });
  connection.end();
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

node.js で実行

  • node app.js を起動

実行すると、コンソールにはコレが出る

Example app listening on port 3000!

ブラウザで、 http://192.168.123.223:3000 にアクセスすると、
image.png
こんなのが出るはず。

これで、ようやくExpressからMySQLへ接続し、データが参照できるようになった。

参考

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

Docker(+ Docker-Compose) + MySQL を入れる(2)

Docker(+ Docker-Compose) + MySQL を入れた後の話

前回 ので、MySQLを用意してデータを作るとこまで出来たので、
MySQLを起動するとこの話だけ書いておく。

Docker-Compose の MySQL を起動する

あとで、もう一つのUbuntu環境にある Express から接続できる状態にしておく。

docker-compose up -d --build

これだけ。--build のオプションがとても重要。

次は Ubuntu(Express環境) から Ubuntu(MySQL環境) へ接続して表示をするよ!!!

参考

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

MariaDB と MySQL のバージョン比較

どこにも見やすい相対表が無かったので作りました。

ただ、よく調べてみると、MariaDB が MySQL よりも先に特定の機能を先に導入したりしていて、 完璧な相対は出来ない です。(まあ完璧に同じだったらなぜ別の製品を作らないといけないのかという話になりますよね)。

なので、この相対表を仕事で使うのは絶対におすすめしません (免責)。

MariaDB MySQL
5.1 5.1
5.2 5.1
5.3 5.1
5.5 & 10.0. 5.5
10.1 5.6
10.2~3 5.7

MySQL 8 と MariaDB 10.3 以降は注意

MySQL 8 と MariaDB 10.3 は

concrete5 は MySQL 5.1.5 から対応

concrete5 CMS は 5.7.0〜8.5.2までは MySQL 5.1.5 から対応しています。
絵文字 (utf8mb4) の対応は 8.5.0 からです。

絵文字対応

絵文字を利用するには、utf8mb4 の collation や charaset である必要があります。
InnoDB で Antelope なデータベースだと、DBの変換時に Index エラーが起きる場合があります。

こぼれ話

MySQL の My はオリジナルコード作者の Michael "Monty" Widenius の娘の名前。
MariaDB は、MySQL が当時サン・マイクロシステムズ社に買収され、退社した後に作った互換DB。名前の Maria も、Widenius氏の娘の名前。まさに姉妹DB。

参考
https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/#incompatibilities-between-mariadb-101-and-mysql-57
https://enterprisezine.jp/dbonline/detail/4220
https://www.s-style.co.jp/blog/2018/04/1709/
https://arakan-pgm-ai.hatenablog.com/entry/2018/08/03/000000
https://gray-code.com/php/using-mysql-and-mariadb-by-php/

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