MySQL Excelからテーブルを作る

MySQL

MySQL Excelからテーブルとフィールドを作る

データベースへのテーブルとフィールドの設定、とても面倒ではありませんか?
phpMyAdminのようなGUIツールを利用しても、ちまちまと面倒です。
コマンドラインも、もちろん入力項目が多いと面倒ですよね。

また、仕様の決定には顧客環境でも見られて編集できるものとして、Excelで仕様をやり取りすることも多いと思います。

そこで、ExcelからMySQLのコマンド画面への貼り付けができるExcelのテンプレートを作成しました。

下記のリンクから、ダウンロードしてみてください。
MySQLのコマンドが分かる人が利用してくださいね。

DB_template.xls

利用方法

  1. CREATE TABLE hogehoge のhogehogeを、自分が作りたいテーブル名にします。
  2. Excelの色がついている個所は、入力したい項目を入力します。
  3. 最後のフィールドは、カンマをなくすように注意してください。
  4. “CREATE TABLE hogehoge”のセルから、”);”までを選択してコピーし、テキストエディタなどに張り付けます。そのまま、SQLコマンドとして利用してください。
  5. 項目が増えたとき、コマンド部分をドラッグでコピーできるので便利です。
  6. D列のデータ長を入力する列には、データ型がintの場合は11、そのほかの場合は255が入るように計算式が入っています。必要でない場合は消してください。

MySQL CSVファイルをインポートする

MySQL

MySQL CSVファイルをインポートする

MySQLでCSVファイルをインポートする方法と、Windowで行う場合のつまづきやすいポイントを書いておきます。

SQLコマンドは次の通りです。

 LOAD DATA INFILE 
 "C:/Users/hogehoge/Documents/My Documents/sample_data.csv" 
 INTO TABLE  examination_results
 FIELDS TERMINATED BY ',' 
 ENCLOSED BY '"'
  1. ファイルの場所(C:\Users\hoghoge\… )は、\で区切るのではなく、/で区切る
  2. ファイルのエンコードはUTF-8にする
  3. 改行コードはCRLFにする
  4. CSVファイルは、最後のフィールドの末尾にも、ちゃんと,(コンマ)をつける
  5. 最後の改行を読み取るのに、LINES TERMINATED BY ‘¥r¥n’ をつける、と書いてあるサイトさんが多いんですが、私の場合はどうもこれをつけると2行目以降のデータが読み込めませんでした。

まぁ、フィールドの数があっていれば、自動的に2行目以降を次のデータとして読み込んでくれるようなので、とりあえずは問題ありません。

MySQL Asia/Tokyoの設定をWindowsでする

MySQL
PHP

CakePHP3 を使い始めたところです。とりあえず、xampp内で使っています。
つまり、Windowsということです。

タイムゾーンの設定で、config/app.php内で

   'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            /**
             * CakePHP will use the default DB port based on the driver selected
             * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
             * the following line and set the port accordingly
             */
            //'port' => 'non_standard_port_number',
            'username' => 'root',
            'password' => '***',
            'database' => 'hogehoge',
            'encoding' => 'utf8',
            'timezone' => 'Asia/Tokyo',
            //後略

と変更したところ、エラー表示となりました。

General error: 1298 Unknown or incorrect time zone: ‘Asia/Tokyo’

出たー。

で、ググったところ、先人たちが

 root# mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql

と教えてくれています。。。
…で、Windowsは?
実は、下記のページを見ながらもよくわからなかったので、ちょっと手探り状態でやりました。間違ってるかもしれませんので、よくご存じの方は、ご指摘ください。

http://dev.mysql.com/downloads/timezones.html

  1. 下記のサイトの、timezone_2016a_posix_sql.zip をダウンロードする。

(その下のファイルでも動くのかも知れませんが、試していません。)
http://dev.mysql.com/downloads/timezones.html

  1. 解凍したファイルを、適当なところに置き、(例ではC:\temp下に置いています)コマンドプロンプトから、次のようにコマンドを送ります。
 C:\xampp2\mysql\bin>mysql -u root mysql -p < C:\temp\timezone_posix.sql

パスワード聞かれるので、入力。
それで終わりっす。

MySQL 4.1 TIMEDIFFがおかしい

MySQL

MySQL 4.1 TIMEDIFFがおかしい

MySQLで二つの時間の差分をとるTIMEDIFFという関数があります。

 
 //例
 TIMEDIFF(NOW(), updated)

 >16:40:27

しかし、MySQLのバージョンが4.1のサーバーで、これを複数行に適用すると、

 838:59:59

という値が帰ってくるというバグがあるようです。。。
http://bugs.mysql.com/bug.php?id=22529

残念!(古…)
違う関数を使いましょう…。