JOGが始まった頃からの話なので今更なのですが、毎回INする度に、JOGに来たOSGの友人とフレンドしたら、このように表示されるようになり、困っております。
この方以外に自分の「Tarsya Beautiful」というOSG名でもこうしてフレンド要請が来ることがあります。
このようなフレンド要請が来ないようにできないでしょうか?
ふと,DBのデータベースから直接削除してしまえばいいのではないかと思い浮かびまして,DBをチェックしたところ次のようになっていました.
MariaDB [jogrid_db]> select * from Friends where PrincipalID='c125a7ce-6535-47fb-b7e6-b7be9b809f4f' AND Friend LIKE 'a9a5f3ce-f94f-4c91-9960-76449b99e70c%';
+--------------------------------------+--------------------------------------------------------------------------------------+-------+---------+
| PrincipalID | Friend | Flags | Offered |
+--------------------------------------+--------------------------------------------------------------------------------------+-------+---------+
| c125a7ce-6535-47fb-b7e6-b7be9b809f4f | a9a5f3ce-f94f-4c91-9960-76449b99e70c;http://hg.osgrid.org:80/;1925 froufrou;054bb06c | 1 | 0 |
| c125a7ce-6535-47fb-b7e6-b7be9b809f4f | a9a5f3ce-f94f-4c91-9960-76449b99e70c;http://hg.osgrid.org:80/;1925 froufrou;2222df62 | 1 | 0 |
| c125a7ce-6535-47fb-b7e6-b7be9b809f4f | a9a5f3ce-f94f-4c91-9960-76449b99e70c;http://hg.osgrid.org:80/;1925 froufrou;6bdf95bb | 1 | 0 |
| c125a7ce-6535-47fb-b7e6-b7be9b809f4f | a9a5f3ce-f94f-4c91-9960-76449b99e70c;http://hg.osgrid.org:80/;1925 froufrou;7f938e9d | 1 | 0 |
| c125a7ce-6535-47fb-b7e6-b7be9b809f4f | a9a5f3ce-f94f-4c91-9960-76449b99e70c;http://hg.osgrid.org:80/;1925 froufrou;a20eb81b | 1 | 0 |
| c125a7ce-6535-47fb-b7e6-b7be9b809f4f | a9a5f3ce-f94f-4c91-9960-76449b99e70c;http://hg.osgrid.org:80/;1925 froufrou;b3520196 | 1 | 0 |
| c125a7ce-6535-47fb-b7e6-b7be9b809f4f | a9a5f3ce-f94f-4c91-9960-76449b99e70c;http://hg.osgrid.org:80/;1925 froufrou;c5bda3fe | 1 | 0 |
+--------------------------------------+--------------------------------------------------------------------------------------+-------+---------+
7 rows in set (0.00 sec)
フラグの詳細がまだ分からないのですが,取り敢えず削除しちゃっていいですかね?
原因が分かったかもしれない.
ソースコードを見ていて,どうも既存のデータベースの構造と合わない気がして,「バグか?」と思ったのですが,念のため授業で使用しているOpenSim のデータベースを見てみたら,なんと,データベースの構造が違っています.
JOG
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| PrincipalID | char(36) | NO | PRI | NULL | |
| Friend | varchar(255) | NO | PRI | NULL | |
| Flags | varchar(16) | NO | | 0 | |
| Offered | varchar(32) | NO | | 0 | |
+-------------+--------------+------+-----+---------+-------+
授業用
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| PrincipalID | varchar(255) | NO | PRI | | |
| Friend | varchar(255) | NO | PRI | | |
| Flags | varchar(16) | NO | | 0 | |
| Offered | varchar(32) | NO | | 0 | |
+-------------+--------------+------+-----+---------+-------+
PrincipalID の長さが違う!! orz
HyperGrid では アバターの識別に UUID ではなく,Universal User Identifier と言うのを使うようなのですが(被らないことになっているからUUIDでいいじゃん),そのためには PricipalID は長さが255ないとダメなんです.
じゃあ,なんで JOG はPrincipalID が 36のままの? って言うことですが(通常は自動的に修正される),実は JOGのデータベースを作成する際にデフォルトの文字セットを UTF-8 にしました.
UTF-8だと1文字3バイト(将来的には4バイトになるらしいが)で,このテーブルのプライマリーキーはPrincipalID と Friend なのでプライムキーが合計で (255+255)x3 = 1,530バイトになります.
ところが,MySQL(MariDB) はプライマリーキーが 1,000 バイト以下でないとダメなんだそうです.
そういう訳で,PrincipalID の型変換時にエラーが起きて,たぶんそのまま動いてきたのだと推測されます. orz
仕方ないので,PrincipalID と Friend の文字コードを Latin1 に変更して,PrincipalID の長さを 255 にしました.
ALTER TABLE Friends MODIFY COLUMN `Friend` varchar(255) CHARACTER SET latin1;
ALTER TABLE Friends MODIFY COLUMN `PrincipalID` varchar(255) CHARACTER SET latin1;
これで上手くいくと良いのですが.....
因みに,いままでの HyperGrid 間でのフレンド関係は正常に成立していませんでの(DB上に中途半端に登録されている),データベース上から削除させていただきます.
特に影響はないと思いますが,よろしくお願いします.