記録として残しておきたいブログ

主にプログラミングについて書きます

MySQL 絵文字のデータを挿入できない

MySQL: 5.5.54-0+deb8u1 (Raspbian)

MySQLに絵文字を入れようと思うとutf8では入れられないらしい。utf8mb4という文字コードが用意されていて、それを使えば対応できるそうです。

MySQLのutf8は1文字3バイトとして扱っている。しかし、絵文字などは1文字4バイトになっているためデータを扱えない。


http://okamerin.com/nc/title/mysql_utf8mb.htm
MySQLの文字コードをutf8mb4にする - light log

my.cnfの設定

自分のmy.cnfは /etc/mysql/my.cnfにあった

クライアントとサーバーの文字コードを設定する

[client]
...
#default-character-set = utf8
default-character-set = utf8mb4   # utf8mb4に変更

[mysqld]
...
#character-set-server = utf8
character-set-server = utf8mb4   # utf8mb4に変更

データベースの文字コード設定

mysql> alter database databasename default character set utf8mb4;

テーブルの文字コードを設定

mysql> ALTER TABLE m_listener DEFAULT CHARACTER SET utf8mb4;
mysql> ALTER TABLE latest_comments DEFAULT CHARACTER SET utf8mb4;

列の文字コードの設定

mysql> ALTER TABLE m_listener MODIFY user_name VARCHAR(45) CHARACTER SET utf8mb4 NOT NULL;
mysql> ALTER TABLE latest_comments MODIFY message VARCHAR(360) CHARACTER SET utf8mb4 NOT NULL;


MySQLの再起動
sudo /etc/init.d/mysql restart

Python:ファイルへの書き込み

Pythonでのファイル操作 - Qiita参考にさせていただきました。

# 上書き
with ("myfile.txt", "w") as f:
    f.write("hello world\n")

# 追記
with ("myfile.txt", "a") as f:
    f.write("hoge")

もし、指定したファイルが存在していなかった場合には作成してくれる

MySQL データベースとユーザーの作成

環境

Raspberry pi3
OS: Raspbian jessie lite
MySQL: 5.5.54-0+deb8u1 (Raspbian)

やること

1.データベースの作成
2.ユーザーの作成
3.権限の付与
4.パスワードの設定


データベースの作成

rootでログインする

例)testdb という名前のデータベースの作成

mysql> create database testdb;

ユーザの作成

(1)ユーザの作成、権限付与
例)user1という名前のユーザを作成

・user1は testdbのすべてのテーブルにアクセス可能
・uesr1は権限付与以外の権限を持っている

mysql> GRANT ALL ON testdb.* TO user1@localhost;


(2)設定を反映

mysql> FLUSH PRIVILEGES;


(3)作成したユーザにパスワードを設定する
例)user1のパスワードに「password」を設定する

mysql> SET PASSWORD FOR user1@localhost=password('password');


参考サイト
MySQL/ユーザとDB作成 - MinacoWiki

【メモ】MySQLdbをimportできるようになるまでのコマンド

環境

Raspberry pi3
OS: Raspbian jessie lite

PythonからMySQLに接続したくて躓いた

f:id:tmg1998:20170409004309p:plain

PythonからMySQLに接続するための準備として mysqlclient をpipでインストールしたかったけど、なんかできなかった


いろいろ調べながらコマンドうってて、どのコマンドによってできるようになったのかがよくわからないから実行したコマンドを載せておく

$ sudo apt-get install python-pip

$ sudo apt-get install python-dev python3-dev

$ sudo apt-get install libmysqlclient-dev

$ pip install -U pip

$ easy_install -U setuptools

$ sudo apt-get install python-mysqldb

$ pip3 install mysqlclient

とりあえず、できてよかった(?)




参考にしたサイトはたくさんあってよくわかりませんでした。

外部のネットワークに接続できない

環境

Raspberry pi3
OS: Raspbian jessie lite

ping google.com でエラーになる

外部のネットワークに接続できない...

pi@raspberrypi:/etc $ ping google.com
connect: Network is unreachable

デフォルトゲートウェイが正しく設定できていなかった

 外部と通信するための出入り口


/etc/network/interfaces に設定を記述することで解決した


ゲートウェイの確認をしてみた

pi@raspberrypi:/usr/bin $ route -v
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
192.168.3.0     *               255.255.255.0   U     303    0        0 wlan0

ゲートウェイが'*'だと、設定できていないらしい

あれ、 /etc/dhcpcd.conf に書いたんだけどな

# /etc/dhcpcd.conf
static domain_name_servers=192.168.3.1

設定が反映されていないっぽい?


/etc/network/interfaces にゲートウェイの設定を記述する

固定IPにしていて、設定する場合

manual を static にする
address, netmask, gateway を追加する

# /etc/network/intetfaces
...
allow-hotplug wlan0
iface wlan0 inet static
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    address 192.168.3.14
    netmask 255.255.255.0
    gateway 192.168.3.1


再起動する

外部と通信でるようになった

pi@raspberrypi:~ $ ping google.com
PING google.com (216.58.221.14) 56(84) bytes of data.
64 bytes from nrt13s38-in-f14.1e100.net (216.58.221.14): icmp_seq=1 ttl=55 time=5.90 ms
64 bytes from nrt13s38-in-f14.1e100.net (216.58.221.14): icmp_seq=2 ttl=55 time=9.36 ms
64 bytes from nrt13s38-in-f14.1e100.net (216.58.221.14): icmp_seq=3 ttl=55 time=29.5 ms


参考サイト
weworkweplay.com

CentOS スクリプトを定期的に実行する crontab

環境

OS: CentOS7
Python: 3.6.0
Vagrant上にある

CentOS7で定期的に実行する

これは定期的になにか取得したり、投稿したりしたいときに使えるかも

crontabというものを使う。

cron の設定ガイドをみながらやってみた

crontab -e

で設定を行う

20 02 * * 1 $HOME/.pyenv/shims/python 実行したいファイル

pyenvの場合、$HOME/.pyenv/shims/pythonで実行しないといけないらしい
デフォルトでは、システムにインストールされているpythonで実行されてしまうため

参考サイト
【Python】cronでpyenv環境のPythonが実行されない時の対処法 – あずみ.net