MySQLの最近のブログ記事

DBD::mysqlをCPANからインストールしようとしたら、テストがこけました。

はじめに

↓こちらの記事をもとに、DTIのVPSサーバ(エントリープラン、月額490円)でLAMP環境をバージョンアップしてみました。

ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編) - さくらインターネット創業日記
これは、MySQLを5.?から5.5にバージョンアップしたら起動しなくなって七転八倒しながらなんとか起動するまでにたどり着けたあるプログラマの記録です。
シェルスクリプトからSQL文を実行する場合はこのようにします。

batch.sqlファイルに実行したいSQL文をあらかじめ書いておいて、
mysql -h host -u username -ppassword dbname < batch.sql
(↑ -pの直後に続けてパスワードを書きます。)
日時データが、UnixTime(Unixエポックタイム, epoch time)の数値として保存されている場合に、それをDateTime型に変換する方法です。

例として、下記のようなint型のカラムがあったとします。
+---------------+
| starttime     |
+---------------+
|    1187015526 |
|    1187024827 |
|    1187099887 |
|    1311443077 |
|    1311443081 |
+---------------+
MySQLをコマンドラインで使うときは、ページャ(pager)機能を使うと死ぬほど便利です。

自分のMobableTypeのmt_entryテーブルの中身がどうなっているかを調べてみました。

あくまで自分のケースなので、他のケースでもうこうなっているとは限りません。
ちなみに私はほとんどMTをカスタマイズしておらず、ブログも1つしか運営していません。
私と同じような使い方をしている場合は、同じようなデータになっていると想像できます。

MySQLのテーブル定義をHTMLに変換して出力するツール

[mysql]テーブル定義書をhtml出力するという記事が素晴らしかったので、私の方でシェルスクリプトを改良してみました。
MovableType5.12のBテーブル定義一覧です。
DBはMySQLです。
何かのお役にたてばと思い、作成してみました。

MySQL charとvarcharの違い

char 固定長
varchar 可変長

例えばchar(4)の場合だと、'a'が格納されても'abc'が格納されても4バイト占有する。


http://dev.mysql.com/doc/refman/5.1-olh/ja/char.html
Ubuntu上のMySQLを起動、停止、再起動する方法。
$ sudo /etc/init.d/mysql start    ←起動
$ sudo /etc/init.d/mysql stop     ←停止
$ sudo /etc/init.d/mysql restart  ←再起動

MySQLのINT型の最小値と最大値は、-2147483648~2147483647です。

MySQL 5.1 リファレンスマニュアル :: 10 データタイプ :: 10.2 数値タイプ

この数字を覚えるコツをお教えしましょう。

[Perl]DBIの使い方入門

PerlでDBIモジュールを使ってDB操作を行うためのかんたんなサンプルコードです。

「都道府県マスタ」テーブルを作って、CRUD(レコード追加、読み取り、変更、削除)を行います。

注:
  • コマンドラインから実行することを想定しています。
  • ユーザ名、パスワード、DB接続情報などは環境に合わせて変更してくださいね。
  • サンプルではMySQLを使用していますが、他のRDBMSにも使えると思います。

 #!/usr/bin/perl
 
 use strict;
 use warnings;
 use DBI;
 
 my $user = 'username';
 my $passwd = 'pass';
 my $host = 'localhost';
 my $dbname = 'mysample';
 my $dbh = DBI->connect("DBI:mysql:$dbname:".$host, $user, $passwd);
 
 my $sql;
 my $sth;
 
 # CREATE TABLE
 $sql = "CREATE TABLE prefmaster ( id INT , name VARCHAR(255) ) ";
 $dbh->do($sql);
 
 # INSERT
 $sql = " INSERT INTO prefmaster (id,name) values (1, 'hokkaido') ";
 $dbh->do($sql);
 $sql = " INSERT INTO prefmaster (id,name) values (2, 'akita') ";
 $dbh->do($sql);
 
 # SELECT
 $sql = "SELECT * FROM prefmaster";
 
 $sth = $dbh->prepare($sql);
 $sth->execute;
 
 print "SELECT\n";
 while(my @a = $sth->fetchrow_array){
     print "@a\n";
 }
 print "\n";
 
 # UPDATE
 $sql = " UPDATE prefmaster SET name = 'iwate' WHERE id = 2 ";
 $dbh->do($sql);
 
 # DELETE
 $sql = " DELETE FROM prefmaster WHERE id = 1 ";
 $dbh->do($sql);
 
 # SELECT AGAIN
 $sql = "SELECT * FROM prefmaster";
 
 $sth = $dbh->prepare($sql);
 $sth->execute;
 
 print "SELECT\n";
 while(my @a = $sth->fetchrow_array){
     print "@a\n";
 }
 print "\n";
 
 
 # DROP TABLE
 $sql = " DROP TABLE prefmaster ";
 $dbh->do($sql);
 
 
 $sth->finish;
 $dbh->disconnect;

※ このページは自分用メモなので随時書き換えます。

PHPからMySQLに接続しようとしたら、

Warning: mysql_connect(): Client does not support authentication
protocol requested by server; consider upgrading MySQL client

というエラーが出たので、いろいろ調べてみました。

あるブログ記事に対処法が書いてありました。

こんな感じのエラーが出た場合は、
SET PASSWORD FOR root@localhost = OLD_PASSWORD('password_str');
で解決。

実際やってみたところ、MySQLのコマンドプロンプトで、

mysql > SET PASSWORD FOR root@localhost = OLD_PASSWORD('パスワード文字列');

と入力すると解決しました。

ご親切な記事をありがとうございます。

MySQLを、コマンドラインで操作して遊んでみました。

やっぱり、コマンドラインからDBを直接叩くというのは気持ちがいい。

なにかこう、コンピュータと直接対話している気がする。

黒い画面に白い文字。

コンピュータの画面はこれに限る。


MySQLをインストールした後、
CPANコマンドを使ってDBD::mysqlをインストールしようとしたら、変なエラーが出ました。

MySQLふたたび

半年ほどさぼってたMySQL、また勉強し始めました。

前回、LAMPデビューしたとか言ってうかれてた直後、結局MySQLで挫折してたのでした。
挫折した原因は。。。

①文字化け問題
 そもそも文字コードの違いをよくわかってなかったので、DBに格納したデータが文字化けを起こした。
 たぶん、phpMyAdminがUTF5のため、Webアプリから入力したデータとphpMyAdminからSQLで注入したデータが混在して、文字化けしたんだと思われる。

②DBIの使い方
 MSAccessは結構使ってたのでSQL自体はそれほど難しくなかったんだけど、DBIでSQLを使ってデータを取り出すのが意外と難しい。
 「"」とか「'」のクオテーションが抜けてると動かなかったり、SELECT文の結果を受け取るのにfetchrow_arrayみたいな関数を使わないといけないとか。prepareとかexecuteとかの意味がさっぱりわからん。


そこで今回は、

対策①:文字コードはEUCで統一。
  → これでだいぶ楽になりそう。
対策②:一行書いたら動作確認。
  → 時間はかかるが、これしかない。

これで、何とか難所を切り抜けられそうな気がします。

WEBページのFORM上で入力したデータを、mySQLのDBに格納するテストに成功!

パッケージとライブラリの使い方がだいぶ身についてきた。

今回初めて、
・cgi-lib.pl
・jcode.pl
を導入しました。
cgi-libは便利ですねー。
FORMデータを扱うのが一瞬でできました。
今まで一からコードを書いてた(コピペしてた)のがあほらしくなりました。

僕は「とほほのwww入門」でperlとcgiを覚えたので、ずっとあそこのサイトのコードを使いまわしてました。
wwwboardを改造してcgiを作ってました。


これは、あくまでperl/cgiの動作を見せるためのサンプルなので、本格的なWEBアプリには向いてなかったんですね。

とほほ。今気づきました。

コード書き直さなくっちゃ。

【mySQL】謎の文字化け

LAMP(Perl)の環境で、phpMyAdminからSQL文(insert)を発行してDBに日本語文章を格納し、
それをPerlのDBIで読み出したら謎の文字化けが・・・

文字コードをS-JIS,EUC,UTF8のどれで試してもうまくいかん。
う~ん誰か助けて!!

人気記事

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMySQLカテゴリに属しているものが含まれています。

前のカテゴリはApacheです。

次のカテゴリはCSSです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事