Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9034

MySQL で bit(1) を使う

$
0
0

次のページを参考にしました。
MySQLに真偽値を格納する場合はbit(1)型のフィールドが最適

テーブルの作成

create_table.sql
droptableifexiststable_a;createtabletable_a(idintprimarykey,statusbit(1),messagevarchar(20));quit

データの挿入

insert_data.sql
insertintotable_asetid=10,status=true,message='Morning';insertintotable_asetid=20,status=false,message='Afternoon';insertintotable_asetid=30,status=true,message='Evening';insertintotable_asetid=40,status=false,message='Night';;selectid,HEX(status),messagefromtable_a;quit

実行結果

$ mysql -uscott -ptiger123 test_db < create_table.sql
$ mysql -uscott -ptiger123 test_db < insert_data.sql
id  HEX(status) message
10  1   Morning
20  0   Afternoon
30  1   Evening
40  0   Night

Python3 でデータを読む

data_read.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
#
#   data_read.py
#                   Jan/30/2021
#
importsys#
importmysql.connector#
#
# ----------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")#
host_aa='localhost'user_aa='scott'password_aa='tiger123'data_base='test_db'conn=mysql.connector.connect(user=user_aa,password=password_aa, \
    host=host_aa,database=data_base)#
cursor=conn.cursor(dictionary=True)#
sql_str="select id, status, message from table_a order by id"cursor.execute(sql_str)rows=cursor.fetchall()forrowinrows:#   print(row)
print(row["id"],row["status"],row["message"])#
cursor.close()conn.close()#
sys.stderr.write("*** 終了 ***\n")#
# ----------------------------------------------------------------

実行結果

$ ./data_read.py 
*** 開始 ***
10 1 Morning
20 0 Afternoon
30 1 Evening
40 0 Night
*** 終了 ***

Node.js でデータを読む

data_read.js
#! /usr/bin/node
// ---------------------------------------------------------------//  data_read.js////                  Jan/30/2021//// ---------------------------------------------------------------'use strict'// ---------------------------------------------------------------functioncast01(field,useDefaultTypeCasting){if((field.type==="BIT")&&(field.length===1)){varbytes=field.buffer();return(bytes[0]===1);}return(useDefaultTypeCasting());}// ---------------------------------------------------------------console.error("*** 開始 ***")varmysql=require('mysql')varconnection=mysql.createConnection({host:'localhost',user:'scott',password:'tiger123',typeCast:cast01})connection.query('Use test_db')connection.query("select * from table_a",function(err,rows){if(err)throwerrconsole.log(rows.length)vardict_aa=newObject()rows.forEach(function(row){//      console.log(row)console.log(row.id,row.status,row.message)})connection.end()console.error("*** 終了 ***")})// ---------------------------------------------------------------

実行結果

$ ./data_read.js 
*** 開始 ***
4
10 true Morning
20 false Afternoon
30 true Evening
40 false Night
*** 終了 ***

Go でデータを読む

data_read.go
// ----------------------------------------------------------------////  data_read.go////                  Jan/30/2021//// ----------------------------------------------------------------packagemainimport("database/sql""fmt""log""os"_"github.com/go-sql-driver/mysql")typeArticlestruct{idintstatus[]bytemessagestring}// ----------------------------------------------------------------funcmain(){fmt.Fprintf(os.Stderr,"*** 開始 ***\n")db,err:=sql.Open("mysql","scott:tiger123@/test_db")iferr!=nil{log.Fatal(err)}err=db.Ping()iferr!=nil{log.Fatal(err)}sql_str:="select id,status,message from table_a"rows,err:=db.Query(sql_str)iferr!=nil{fmt.Println(err)}deferrows.Close()forrows.Next(){vararArticleiferr:=rows.Scan(&ar.id,&ar.status,&ar.message);err!=nil{fmt.Println(err)}fmt.Fprintf(os.Stderr,"%d %b %s \n",ar.id,ar.status,ar.message)}iferr:=rows.Err();err!=nil{fmt.Println(err)}fmt.Fprintf(os.Stderr,"*** 終了 ***\n")}// ----------------------------------------------------------------

実行結果

$ go run data_read.go
*** 開始 ***
10 [1] Morning 
20 [0] Afternoon 
30 [1] Evening 
40 [0] Night 
*** 終了 ***

参考ページ
Casting Bit Fields To Booleans Using The Node.js MySQL Driver


Viewing all articles
Browse latest Browse all 9034

Trending Articles