RailsからMySQLのテーブルを作成する時にLONGBLOBなカラムを作成する方法

RailsからMySQLのテーブルを作成するには

Railsのマイグレート機能には、カラム属性としてbinaryがあるのですが、これを指定してもMySQL上ではBLOBというカラム属性になります。

構文としては
[ruby]create_table :user_photos do |t|
  t.string :name
  t.binary :photo_image
end[/ruby]
もっと大容量のLONGBLOBが欲しい!

という時にはbinaryの所にオプションで:limit => 16.megabyte を指定します。
[ruby]create_table :user_photos do |t|
  t.string :name
  t.binary :photo_image, :limit => 16.megabyte
end[/ruby]
こんな感じですね。

[Scala]LiftでMySQLに繋ぐ(Maven編)

Scala + Liftの環境は、最初はH2DBにつながるようになっている。

一般的にサービスを提供する場合、やはりMySQLなどに繋いで使いたい

ということで、MySQLに接続する方法

Mavenでプロジェクトを作っている前提で

pom.xmlファイルのdependenciesに以下を追加

[xml]<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>[/xml]

続いて

src/main/resources/props/default.props にデータベースの定義を追加する

[text]db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/lift_mysql_example
db.user=root
db.password=[/text]

MySQLにログインしてデータベースを作成

[shell]mysql> create database lift_mysql_example;[/shell]

jettyを起動
※Mavenが起動時に必要なライブラリを全部そろえてくれる

[shell]mvn jetty:run[/shell]

これで、mysql上にusersテーブルが作成されます。
※デフォルト状態のLiftプロジェクトの場合

Ubuntuに入れたMySQLに外部から接続する

UbuntuはパッケージでMySQLを入れるとすぐに起動しますが

外部からの接続が出来ないように設定されています。

/etc/mysql/my.cnf

このファイルの中に

という行があります。

これは、IPが127.0.0.1からの接続しか受け付けないですよ、という設定で

127.0.0.1は自分自身のことなので、そのマシンの中からしかつなぐことが出来ません。

この設定行をコメントアウトすることで、その制限を外すことが出来ます。

MySQLでデフォルトのキャラセットをUTF-8にする

MySQLのデフォルトのキャラセットをUTF-8にセットする

Linuxの場合

/etcにmy.cnfか、/etc/mysqlにmy.cnfがあるので、それを開く

[client]
の下に

を追記

[mysqld]
の下にも

を追記

2012年09月13日追記
※MySQL5.5からは[mysqld]で使用するキャラセットの設定はdefault-character-setではなく

character-set-serverに変わります。

サーバ再起動

[mysqld]

MySQLで巨大なSQLを送信したときに「Got a packet bigger than ‘max_allowed_packet’ bytes」エラー

MySQLで巨大なSQLを送信したときに

「Got a packet bigger than ‘max_allowed_packet’ bytes」

というエラーが出る。

これは、MySQLサーバの設定で「max_allowed_packet」があり、ここで指定したサイズよりも大きいパケットを送信したときに出るエラーのようだ。

解決方法としてはmy.cnfの[mysqld]のところに

といった感じで大きいサイズを指定することで解決する

MySQL で ビットマスク を扱う

MySQLで、テーブルの項目(type)がビットとして保存されている場合

1 真面目
2 面白い
4 硬派
8 草食系

といったtypeがあるとする

検索条件に指定する

「まじめ」のみを検索したいときは

真面目と硬派のどちらかがチェックされているデータを抽出したい場合

真面目と硬派がどちらもチェックされているデータを抽出する場合

検索結果にテキストで表示する

MySQLのlikeでの「_」の扱い

先ほど、仕事でなぜか違うデータが抽出されるんだけど…という不具合を報告され

よくよく調査したら、

という条件を見つけた。

前任者は、2001_1001_202_100とか、2001_1001_202_の後にコードが付いたデータを抽出したかったのであろうが

この条件だと2001_1001_2023というデータもヒットしてしまう。

これは、likeでは「_」は任意の一文字を意味する記号であるからである。

仕方が無いので、検索条件として使うコードの「_」をエスケープすることで解決した。

Ruby on Railsでの書き方

MySQLでCSVファイルの入出力

MySQLにはmysqldumpというダンプツールがあるが、CSVファイルでデータを出力できると、加工もしやすい。

また、CSV出力時には基本、SQL構文での出力となるため、条件指定も容易になる。

書き方としては

FIELDSオプション

  • TERMINATED BY
    項目の区切り文字を指定する
  • ENCLOSED BY
    項目を囲む文字(たとえばダブルクォーテーション)
  • ESCAPED BY
    エスケープする文字を指定(¥マークが一般的)

LINESオプション

  • TERMINATED BY
    行の末端記号(\r\n or \n)

MySQLでユーザを削除

MySQLでユーザを削除する手順

権限を削除

REVOKEで、削除したいユーザの権限を削除する

REVOKE構文について

参考に、guestユーザの権限を削除する実際の構文は

ユーザを削除