 
mysqllib.rbは、Ruby用MySQL,MariaDBライブラリです。本ライブラリの実行には、libmysql.dll(32ビット用)を必要とします。
      Windows上で動作します。
      
      実行環境
      rubyのバージョン 2.5.1p57 x86 (RubyInstaller)
      MySQLのバージョン 5.5、MaraiDBのバージョン 10.0
      mysqllib.rb(Ver.1.08)のダウンロード(mysqllib_V108.7z)
   
Mysqllibクラス MySql用クラスです。
構造体のメンバー及び内容。構造体は、MySQLのMYSQL_FIELD構造体を元にしています。
| メンバ名 | 型 | 内容 | 
|---|---|---|
| sname | 文字 | フィールド名 | 
| sorg_name | 文字 | フィールド名 ASによる別名使用時は元のフィールド名 | 
| stable | 文字 | テーブル名 | 
| sorg_table | 文字 | テーブル名 ASによる別名使用時は元のテーブル名 | 
| sdb | 文字 | データベース名 | 
| scatalog | 文字 | catalog name 内容は、常に「def」 | 
| sdef | 文字 | デフォルト値 | 
| ilength | 整数 | 文字列長または範囲(数値の場合) | 
| imax_length | 整数 | 最大文字列長または最大範囲 | 
| iname_length | 整数 | フィールド名(sname)の長さ | 
| iorg_name_length | 整数 | sorg_nameの長さ | 
| itable_length | 整数 | テーブル名(stable)の長さ | 
| iorg_table_length | 整数 | sorg_tableの長さ | 
| idb_length | 整数 | データベース名の長さ | 
| icatalog_length | 整数 | scatalogの長さ | 
| idef_length | 整数 | デフォルト値の長さ | 
| iflags | 整数 | フィールドのビットフラグ 下記表参照 | 
| idecimals | 整数 | 数値フィールドの小数部桁数 | 
| icharsetnr | 整数 | フィールドに対するキャラクター・セットナンバー。 ストリングデータタイプで63の場合は、バイナリーデータ | 
| itype | 整数 | フィールドタイプ(数字) 下記表参照 | 
| stype | 文字 | フィールドタイプ(文字) 下記表参照 | 
フィールドのビットフラグ。 iflagsは、下記ビットの組み合わせとなります。
| フラグ名 | 値 | 内容 | 
|---|---|---|
| NOT_NULL_FLAG | 1(0x0001) | フィールドは NULL にできない | 
| PRI_KEY_FLAG | 2(0x0002) | フィールドはプライマリキーの一部である | 
| UNIQUE_KEY_FLAG | 4(0x0004) | フィールドはユニークキーの一部である | 
| MULTIPLE_KEY_FLAG | 8(0x0008) | フィールドは非ユニークキーの一部である | 
| BLOB_FLAG | 16(0x0010) | フィールドは BLOB または TEXT である | 
| UNSIGNED_FLAG | 32(0x0020) | フィールドは UNSIGNED 属性を持っている | 
| ZEROFILL_FLAG | 64(0x0040) | フィールドは ZEROFILL 属性を持っている | 
| BINARY_FLAG | 128(0x0080) | フィールドは BINARY 属性を持っている | 
| ENUM_FLAG | 256(0x0100) | フィールドは ENUM である | 
| AUTO_INCREMENT_FLAG | 512(0x0200) | フィールドは AUTO_INCREMENT 属性を持っている | 
| TIMESTAMP_FLAG | 1024(0x0400) | フィールドは TIMESTAMP である | 
| SET_FLAG | 2048(0x0800) | フィールドは SET と定義されている | 
| PART_KEY_FLAG | 16384(0x1000) | フィールドはマルチインデックスの一部である | 
| GROUP_FLAG | 32768(0x2000) | フィールドは GROUP BY の一部である | 
| UNIQUE_FLAG | 65536(0x4000) | 
フィールドタイプ
| タイプ名(stype) | 値(itype) | 内容 | 
|---|---|---|
| MYSQL_TYPE_DECIMAL | 0 | DECIMAL または NUMERIC フィールド | 
| MYSQL_TYPE_TINY | 1 | TINYINT フィールド | 
| MYSQL_TYPE_SHORT | 2 | SMALLINT フィールド | 
| MYSQL_TYPE_LONG | 3 | INT フィールド | 
| MYSQL_TYPE_FLOAT | 4 | FLOAT フィールド | 
| MYSQL_TYPE_DOUBLE | 5 | DOUBLE または REAL フィールド | 
| MYSQL_TYPE_NULL | 6 | NULL フィールド | 
| MYSQL_TYPE_TIMESTAMP | 7 | TIMESTAMP フィールド | 
| MYSQL_TYPE_LONGLONG | 8 | BIGINT フィールド | 
| MYSQL_TYPE_INT24 | 9 | MEDIUMINT フィールド | 
| MYSQL_TYPE_DATE | 10 | DATE フィールド | 
| MYSQL_TYPE_TIME | 11 | TIME フィールド | 
| MYSQL_TYPE_DATETIME | 12 | DATETIME フィールド | 
| MYSQL_TYPE_YEAR | 13 | YEAR フィールド | 
| MYSQL_TYPE_NEWDATE | 14 | Date フィールド (MySQL 5.0 or later) | 
| MYSQL_TYPE_VARCHAR | 15 | |
| MYSQL_TYPE_BIT | 16 | BITフィールド | 
| MYSQL_TYPE_NEWDECIMAL | 246 | 精密な DECIMAL あるいは NUMERICフィールド | 
| MYSQL_TYPE_ENUM | 247 | ENUM フィールド | 
| MYSQL_TYPE_SET | 248 | SET フィールド | 
| MYSQL_TYPE_TINY_BLOB | 249 | TINYBLOB フィールド | 
| MYSQL_TYPE_MEDIUM_BLOB | 250 | MEDIUMBLOBフィールド | 
| MYSQL_TYPE_LONG_BLOB | 251 | LONGBLOB フィールド | 
| MYSQL_TYPE_BLOB | 252 | BLOB フィールド | 
| MYSQL_TYPE_VAR_STRING | 253 | VARCHARフィールド | 
| MYSQL_TYPE_STRING | 254 | CHAR フィールド | 
| MYSQL_TYPE_GEOMETRY | 255 | 空間フィールド | 
実行には、「libmysql.dll」が必要です。同じフォルダに入れて下さい。
   MySQLのバージョン:5.5及びMariaDBのバージョン:10.0で確認。
   MySQLのインストール及びmy.iniの設定例、
   MariaDBのインストール及びmy.iniの設定例
   
# coding: utf-8
require "./mysqllib"
class MySql < Mysqllib
   def execQuery(sSQL)
      ir = execSQL(sSQL)
      if ir != 0
         sa = "MySQL SQL error¥r¥n" + "errno = " + errno.to_s + ":" +  errmes + "¥r¥n[" + sSQL + "]¥r¥n"
         print sa
         close
         exit
      end
      return ir
   end
end
mysqldb = MySql.new
#mysqldb.sencode = nil
sServer = "localhost"; sUser = "user"; sPwd = "pwd"   #ユーザ名、パスワード
ir = mysqldb.connect(sServer,sUser,sPwd)
if ir != 0
   print "接続失敗¥r¥n"
   exit
end
mysqldb.mysqlSetCharacterSet("utf8")
sSQL = "CREATE DATABASE IF NOT EXISTS db0"
mysqldb.execQuery(sSQL)
sdb = "db0"
mysqldb.selectDB(sdb)
if ir != 0
   print sdb + "選択失敗¥r¥n"
   mysqldb.close
   exit
end
# MySQLでMYISAMを使用
#sSQL = "CREATE TABLE IF NOT EXISTS tbl5 (" +
#       "id int," +
#       "tda datetime," +
#       "cnote char(20)," +
#       "PRIMARY KEY (id)," +
#       "KEY key1 (tda))" +
#       "DEFAULT CHARACTER SET utf8," +
#       "ENGINE=MYISAM"
# MariaDBでAriaを使用
sSQL = "CREATE TABLE IF NOT EXISTS tbl5 (" +
       "id int," +
       "tda datetime," +
       "cnote char(20)," +
       "PRIMARY KEY (id)," +
       "KEY key1 (tda))" +
       "DEFAULT CHARACTER SET utf8," +
       "ENGINE=Aria PAGE_CHECKSUM=1 TRANSACTIONAL=1"
mysqldb.execQuery(sSQL)
sSQL = "SELECT max(id) FROM tbl5"
mysqldb.execQuery(sSQL)
id = 0
ardt = mysqldb.getRecord
if mysqldb.ilRecCount != 0
   id = ardt[0].to_i
   id += 1
end
sSQL = "INSERT INTO tbl5 VALUES (" +
       id.to_s + ",'" +
       Time.now.strftime("%Y-%m-%d %H:%M:%S") + "'," +
       "'日本☀☃ニホン123abc')"
mysqldb.execQuery(sSQL)
sSQL = "SELECT * FROM tbl5 ORDER BY id DESC LIMIT 5"
mysqldb.execQuery(sSQL)
sa = ""; sb = ""; sp = ""; sc1 = ""; sc2 = ""
for ia in 0..(mysqldb.iItemCount - 1)
   field = mysqldb.getfields(ia)
   sa += sc1 + field.sname
   sb += sc1 + field.stype
   sc1 = ","
   if (field.iflags & Mysqllib::PRI_KEY_FLAG) > 0
      sp += sc2 + field.sname
      sc2 = ","
   end
end
print sa + "¥r¥n" + sb + "¥r¥n"
print "プライマリキー:" + sp + "¥r¥n"
for ia in 1..mysqldb.ilRecCount
   ardt = mysqldb.getRecord
   print ardt[0] + "," + ardt[1] + "," + ardt[2] + "¥r¥n"
   mysqldb.nextR
end
mysqldb.close
   履歴