Open gaeeyo opened 2 years ago
インストール時に実行されるMroongaのインストールスクリプトの構成を変更したのが原因でMroongaのUDFが自動で登録されない状態になっています。 https://github.com/mroonga/docker/issues/74#issuecomment-1163958992 のコメントにもあるとおり、https://github.com/mroonga/mroonga/issues/509 と同一問題と思いますが、すみません、まだこの問題を解決しきれていません。 この問題を修正すれば、手動でMroongaのUDFを登録しなくてもよくなりますので、修正版のリリースまでお待ちいただけると幸いです。
レスポンスが16進数になっているのは、別途調べてみます。
レスポンスが16進数になっているのはmysqlコマンドラインクライアントの --binary-as-hex=ON がデフォルトになっているせいだと思います(mroonga_commandが MYSQL_TYPE_VAR_STRING
あたりで返しているんじゃないかと予想)
https://github.com/mysql/mysql-server/blob/mysql-8.0.29/client/mysql.cc#L3531-L3544
ワークアラウンドとしては、 mysql --binary-as-hex=OFF
するとデコードされずに表示されると思います。
レスポンスが16進数になっているのはMySQL 8.0からUDFが返す文字列のエンコーディングがデフォルトでbinary
になったからなんですよ。
https://github.com/mysql/mysql-server/blob/mysql-8.0.29/sql/item_func.cc#L4372
MySQL 8.0からは戻り値のメタデータを設定するためのAPIが増えているのでそれでエンコーディングとしてutf8mb4
を設定しないといけないんです。
https://github.com/mysql/mysql-server/blob/mysql-8.0.29/include/mysql/components/services/udf_metadata.h#L140-L173
別の回避策はselect convert(mroonga_command('status') using utf8mb4);
です。
DBのボリュームを削除して初期化した状態で起動します。
起動した mysql に接続して mroonga_command() を呼び出そうとすると No database selected というエラーになりました。
/usr/share/mroonga/update.sql に CREATE FUNCTION で mroonga_command() 関数を登録する処理が書かれてることがわかったので、実行してみると mroonga_command() 関数が使えるようになりましたが、これは意図的な動作でしょうか?
レスポンスが16進数になっているのは不思議ですが、デコードすると読むことはできました。