次のページを参考にしました。
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