LibreOffice base + MySQL での文字化け

結論から書いてしまうと、mariadb(MySQL)の設定が問題でした。

利用環境:
Windows 7 Pro (LibreOffice 5.0.5.2)
CentOS 7 (mariadb)

Libreoffice base から、mariadb(MySQL)のデータベースを利用する事にしました。
部署内では FileMaker を利用しているのですが、サーバーが遅くなったり、アクセス解析ができない(誰がどのレコードを操作したかなどの監査対応が難しい)、ライセンス維持が面倒なのでフリーウェアでさっくり管理系のデータベースを作成しようと思いました。

注意点:
base + MySQL でデータベースの共用が容易に行えますが、base から複数のデータベースに対して操作できません。
このため、設計上1つのデータベースに全て詰め込む必要があります。
ちょっとこの仕様は怖いので、他のデータベースからマスターになるデータを夜間バッチでテーブル毎コピーするようにしました。

データベースを格納するサーバーを CentOS 7 で立ち上げました。
mariadb のデータベース格納先を /var ではなく /home にしたかったのですが、なんか上手くいかない感じなので諦めました。(時間切れなので、余裕があるときに再チャレンジ予定。)
一度、yum remove で削除して、残骸の MySQL 関係のファイルも全て削除しました。
たぶん、この時に /etc/my.cnf を削除してしまったと思います。

再度インストールして、base から接続したのですが、上手くいきません。

base からは JDBC 接続を行います。

JDBC が無い:

Java が最新のバージョンか確認します。アップデートがうるさかったので古いバージョンだったため、JRE を Sun のホームページからダウンロード、新しい JRE にしました。
https://java.com/ja/download/

Java ランタイムだけでは MySQL 用のドライバーがありませんので、ドライバーもダウンロードします。

https://dev.mysql.com/downloads/connector/j/

ダウンロードした圧縮ファイルを展開して、mysql-connector-java-5.1.38-bin.jar を任意のフォルダに移動させます。
※ドライバークラスはどこかに自動複製されるわけでは無いので、一時的な保存場所では無く恒久的な保存場所に置いてください。

上記の設定で、base から以下の操作でアクセスできるようになりました。

ツール > オプション から LibreOffice のオプション設定画面を開きます。
LibreOffice > 詳細 から以下の設定を行います。


Java実行環境を使用(U) をチェック
一覧の JRE 一覧から最新バージョンを選択(この時は 1.8.0_73)
クラスパス(C) をクリックして、ダウンロードした MySQL 用ドライバーを アーカイブを追加(A) から指定します。


データベースウィザード:

データベースの選択
既存のデータベースに接続(X) MySQL


MySQL 接続のセットアップ
JDBC を使って接続(B)


JDBC 接続のセットアップ
データベース名 sampleDB
サーバー mng.hogehohe.local
ポート番号 3306
MySQL JDBC ドライバークラス com.mysql.jdbc.Driver


ユーザー認証のセットアップ
ユーザー名 hogehoge
※MySQL のユーザーである hogehoge はパスワードなしで MySQL 側で設定しました。ネットワークが LAN 内、F/W でプライベートネットワークからしかアクセスできないようにしているため、インターネット公開はしていないデータベースになります。
※パスワードを設定すると、base ファイルを開く度にパスワード入力が必要になってしまうので、今回はローカル内なのでパスワードなしにしています。


保存して続行

特に支障なく進んで、テスト用のテーブルを開いて更新できていました。
そこで、実際に利用するデータをインポート(calc で開いて base へドラッグ&ドロップでテーブル作成完了です!)してみました。

漢字が ? になっとる。

base 上で入力してもエラーになったり ? に戻ったりで、MySQL 側の問題かなーと思いました。
調べたら base 側でもエンコード指定ができるんですね。
開いているテーブル一覧のデータベース上で右クリック、データベース > プロパティ からデータベースプロパティを開きます。
追加設定にあるデータ変換の文字セットを UTF-8 に変更しました。(サーバー側は UTF-8 環境のため。)


しかし、相変わらず文字化けは解消しません。
(文字セットはディフォルトの「システム」のままでも問題ありません。)

base 側ではこれ以上どうすることもできないので、MySQL 側の設定を確認してみました。

mysql> show variables like 'char%'

上記で確認すると、なぜか character_set_database が latin1 になったままでした。
/etc/my.cnf.d/server.cnf の [mysqld] セクションには character-set-server=utf8 があるのですが、なぜか反映されていません。
mariadb を再起動しても状況が変わっていません。

調べてみたら、mariadb も引き続き /etc/my.cnf を読み込むようで、サーバー上には my.cnf は消してしまってありませんでした。
my.cnf を新しく作成して、!includedir /etc/my.cnf.d のみ追加しました。

上記の設定をして再起動したら、無事 base から日本語入力が反映されるようになりました。
なんか無駄なことをして時間をつぶしてしまった感じでした。

参考サイト:
https://centossrv.com/mariadb.shtml
http://blog.snowcait.info/2014/06/04/mariadb-utf8/

コメント

このブログの人気の投稿

POST が GET になってしまう

PowerDirector で MP4 が読み込めない

ESET が特定のアプリケーションの通信をブロックしてしまう