Q143:MySQLにおいて、Select文でデータを取得した場合、特定の日付だけデータが欠ける場合がある。
Q143-1:
Insert文で日本語文字列のデータをデータベースのテーブルに挿入した場合、登録された文字列が欠けている場合がある。起動時に1万行以上のデータを読み込み、終了時まで確保しているが、そのことに問題があるか。
A143-1:
MySQLまたはJDBCドライバの不具合である可能性があるため、最新版をお試しください。ただし、MySQLの入れ替えは、データの移項が必要であるなど手間が掛かるのに加え、インストールがうまくいかない場合があるので、最終手段としてください。
また、データベースの文字コード(キャラクタセット)の違いによっても、不具合が発生する場合があります。
さらに、起動時に毎回大量のデータをデータベースから所得し、メモリ上(MZ Platform上)に確保しておくことは好ましいことではありません。今後,毎回の処理において必要なデータのみデータベースから取得するよう、修正をご検討ください。
Select文で取得するデータ数を絞る方法ですが
@limitを使う
Select * from テーブル limit 100, 200
Amonth関数を使う
Select * from テーブル where month(日付列)=11
また、11月の方を上の方に持ってくるには逆順でソートも考えられます
BSelect * from テーブル order by 日付列 desc
Q143-2:
・MySQLのデータを日付順に並べて入れ直したら、抜けていた日付のデータを見ることができた。
・Insert時の文字が途中で消えてしまう問題は解決していない。データベースの文字コードはCp932を指定している。
・今後一つのMySQLデータベースに複数のクライアントマシンから接続した場合、止まってしまうような問題が起こると聞いたが大丈夫か。
A143-2:
・入っているレコードの順番は担保されないのが基本なので、日付順に見たい場合には並べ直す必要がある。いずれにせよ1万件以上のデータを読み込んでくることはお勧めしないので、条件設定をしてデータを絞り込んでください。
・消えてしまう文字列について何か特長的なことがあれば教えてください。
・一つのマシンで接続してデータを取得した後、他のマシンからUpdateした場合などは先に取得したデータは古くなっているので、気を付ける必要があります。現在の使用状況では同時に更新が掛かることはあまりないようなので、アプリケーションがある程度完成した後に調整すると良いでしょう。同時に複数のマシンで接続、更新しても、データベースへの接続が切れたり止まってしまうということはございません。