Proxmoxでサーバ構築

イメージ
これまでテスト用にi5第8世代の廃棄PCを使用してきた。 とはいえ今の所何も問題は起きていないが、入れ替えも視野に入れ予備サーバを用意することに。 - メモリ:16GB - SSD:500GB - DDNS+Let's Encrypt - Ubuntu24.04 この環境なので、すぐに構築し直すことは可能だが、とりあえずこのまま置いておいて別のサーバを立てることにする。 最初はRaspberryPiで構築しようと思ったけれど、本体電源+外付けHDD電源+ディスプレイ電源と考えると、邪魔なので廃案。 そこで廃棄しようと思っていた「Lavie NS300/N」が手元にあったので、これを利用することに。 一応バッテリーは正常に動作するので、UPS代わりにそのまま。 - Core™ i3-8145U(やや非力) - メモリ:8GB(少ないが…) - HDD:1TB なので、これまで使用しているものより、若干スペックダウン。 ただ用途は、非常勤で教えに行っている専門学校生用の練習マシンとする予定なので、まぁ問題なさそう。 Proxmox導入 直接、Linuxを導入してもよいのだけれど、今回は Proxmox を導入し、その上でUbuntu Serverを動作させる計画。 USBにProxmoxのイメージを焼いて、インストールすれば問題なく完了。 ただ、現在のバージョンはdebian - trixieがベースになっているので、若干参考になるサイトが少なめ。とはいえ旧版のは参考になるので調べつつ… HDDなだけあって、最初の起動は少し遅いものの、立ち上がってしまえば問題ない。 さぁ、VMにするかCTにするか…。 GUI使うのであれば、VMかなぁ。サーバだしCTでいいかぁ。 という程度の選定で、CT(コンテナ)で進めることに。 - メモリ:4GB - CPU:2 - HDD:20GB(root disk) - HDD:400GB(home用) - Ubuntu24.04 という構成で進めることにした。 テンプレートを用意して、初期設定を行い起動。 まぁすんなりと入った。 液晶を閉じたら、Suspendになってしまったので、若干設定変更。 $ sudo nano /etc/systemd/logind.conf HandleLidSwitch=ignore $ sudo sy...

UTF8の指定ではまった

MariaDB+PHPにて

PHPでDB上のデータを大量に処理するプログラムを書いていて、おかしな現象に出くわした。

1万件+42万件+43万件のjoinで、必要なもののみ取り出して、updateをかけるという手作業ではやる気にならない処理なので、サクッと書いてぶん回すしかない…。

ローカルでmysqlモニタを使用してSQLを叩くと、問題なく結果が返ってくる。
でもって、サーバ上で実行すると、結果がEmpty…。

あれれ?

試しに、phpmyadmin上でSQLだけ叩いてみる。
ローカルと同じ結果になる。

何かがおかしい。

 :
 :
$mysqli = new mysqli("localhost",$username,$password);
if($mysqli->connect_error){
  print('<p>データベースへの接続に失敗しました</p>'.$mysqli->connect_error);
  exit();
}
$mysqli->select_db($dbname);
$mysqli->set_charset("utf-8");
$sql="SELECT bill.bill_id,bill_item.bill_item_id,bill_item_detail.bill_item_detail_id,
             bill.billing_id,bill.bill_month,bill.bill_date,bill.deposit_receive_date
  FROM `bill_item_detail`
  join bill_item on bill_item_detail.bill_item_id=bill_item.bill_item_id
  join bill on bill.bill_id=bill_item.bill_id
  WHERE `bill_item_detail`.`name` LIKE '繰越残高' AND
 :
 :
  order by bill.bill_date";
$result = $mysqli->query($sql);

テーブル3つをjoinして、特定の条件のデータを拾い出すだけのことなのに…。
仕方なく、var_dump($result)で確認してみるが、サーバ上では、やはり0件となってしまう…。

条件をなしにして実行してみると、問題なく返ってくる。

ということは、WHERE句に問題有り。
少しずつ条件を増やしてみる。

name LIKE '〜' を入れた段階でEmptyとなる。

試しに、LIKE '%'で試すと結果が出てくるので、文字コード関連っぽい。

やっと気づいた

ここまでテストして、やっと気づいた。

$mysqli->set_charset("utf-8");

問題は、ここだ!

正しくは、以下のように書く必要が合った。

$mysqli->set_charset("utf8");

そう、「-」が余分だった。

ちょうど、このコードを書く前に、HTMLを書いていて、charset=UTF-8
と書いていていた…。

ああぁ。情けない。
こんな凡ミスをするというのが情けない。

しかし、同じ文字コードを表すのに、この表記の差は何とか統一して欲しい。
もしくは、Aliasでどちらでも機能するようにして欲しい…。

いったい、このミスを見つけるのに、どれだけ時間がかかったものか…。


という戒めの意味を込めて、記録しておく…。

この後、無事実行して80分ほどで書き換えが完了したので、まあ無事終わってはいるのだが…。
このミスを見つけるのに、30分以上脳味噌フル回転で作業して…。


疲れたゎ。


コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?