ブログを検索

2024/09/16

MySQL で SELECT into outfile 出来なくてハマった件

 Windows上の MySQL で SELECT into outfile で CSVファイルをエクスポートしようとしてハマったので残しておく

環境
Windows10 Pro バージョン 1809
MySQL 8.4.0

という環境で

SELECT * FROM table1
into outfile 'C:/Users/User/Downloads/file.csv' CHARACTER SET SJIS fields terminated by ',' enclosed by '"' escaped by '"' lines terminated by '\r\n';

としてダウンロードフォルダに file.csv を作りたかったが下記エラーになる

General error: 1 Can't create/write to file 'C:\Users\User\Downloads\file.csv' (OS errno 13- Permission denied)

my.ini に

secure-file-priv="C:/Users/User/Downloads"

を記述してあり
SELECT @@global.secure_file_priv;
で確認すると C:\Users\User\Downloads\ になっているので MySQL の設定はOK

C:/Users/User/Downloads フォルダのプロパティで セキュリティタブ選択 → 編集 → 追加 → 
「選択するオブジェクト名を入力してください」というテキストボックスに
NETWORK SERVICE と入力 → OKボタン押下
セキュリティタブ選択直後のウインドウに戻ったら NETWORK SERVISE 行を選択し、書き込みの許可にチェックを入れ OKボタン押下
これで解決した。つまり MySQL はネットワークを介してファイルを生成するぽく!? Windowsのセキュリティ設定不足がエラー原因だった
日本語の対処情報は見つけられなかったのでレアケースなのかな???
それともワタクシは検索が下手なのかな???
ともあれ解決したのでOK

2024/09/13

地理院地図上にピン立てしてみた

 仕事で地図上に複数のピンを立てる必要が出てやってみたことのメモ

不特定多数の人に見てもらうサイトを作っていて、「市区町村」を選ぶとそこを中心にした地図を表示し、あらかじめ登録していた5000件ほどの場所をピン表示することになった。この地図は別タブで開く

有料のAPIは使わず無料でやれることが条件

サーバサイドから見ると、フロントから市区町村がPOSTされてくるので該当する役所の緯度経度を求めてそれを中心にした地図を表示、地図にはあらかじめピンを登録しておく。みたいなイメージ

まず思いつくのが Googleマップでピンを立てることだが、手動で複数のピンを立ててみて公開することは出来たものの、5000件の場所を手動では登録したくないのでアップロードで登録しようとしてみたらレイヤー毎に2000件という制限があるようで面倒になって断念

次に Googleマップでピンを立てる別サービスを探して2つほど見つかったが既に廃止されているサービスもあって、継続して使っていけるか不安になって断念

地理院地図に複数ピンを立てるのは簡単のようなのでやってみたら本当に簡単だった。表示時に中心緯度経度も指定できたのでこの手順をメモとして残しておく

まずはピン立てする元データのCSVファイルを用意する

中身はこんな感じのワタクシオリジナルのフォーマットだがある程度自動認識してくれるようで 緯度,経度 が含まれているCSVファイルならフォーマットや項目は自由で良いようだ

ちなみにファイル名は何でもよいが文字コードはs-jis

コード,市区町村,緯度,経度,URL
1000,北海道,43.064325,141.346878,https://www.pref.hokkaido.lg.jp/
1100,札幌市,43.062061,141.354432,https://www.city.sapporo.jp/
1101,札幌市 中央区,43.061434,141.353649,http://www.city.sapporo.jp/chuo/
1102,札幌市 北区,43.090693,141.340882,http://www.city.sapporo.jp/kitaku/

地理院地図上にCSVファイルをドロップする

自動でCSV内の「緯度」「経度」列を認識するので「上記の内容で読込開始」ボタン押下

地図にピンが表示されるので、地図中心位置をいい感じに手動調整する

地図のズームレベルをいい感じに手動調整する 横手市湯沢市レベルだとズーム12くらい!?秋田市盛岡市レベルだとズーム10くらい!?

↑ このズームレベルや中心位置が後で表示する際の初期値として再現されるので調整するのだ

地理院地図で画面上部「共有」→ 「</>」 クリック → 「上記のHTMLを保存」ボタン押下で、テキストボックスに表示されたHTMLをファイル出力すればピン立てした状態で地図を保存できる

「※HTML は一時的なものとしてご利用ください。作図情報は、作図機能を使ってファイルに保存することをおすすめします。」とあるがJavaAcriptの処理が重くてブラウザが応答しなくなった。ピンの数が多すぎなのかな!?

あとはこのHTMLファイルをブラウザにドロップすればいつでもピン立て済みの地理院地図を表示できる

なお、HTMLファイルの中をテキストエディタで見てみると

var vURL_Site = "/index_pm.html?postmessage=1#

で始まる行がある

実際には

var vURL_Site = "/index_pm.html?postmessage=1#10/39.166271/140.62088/&base=std&ls=std&disp=1&vs=c1g1j0h0k0l0u0t0z0r0s0m0f1";

のようになっていて

var vURL_Site = "/index_pm.html?postmessage=1#

に続いている部分を書き換えて変更することで表示を微調整することが可能

水色部分の数字は地図のズームレベルで数字が大きいほど拡大表示する(最大値18)

黄色部分は地図の中心を指定する緯度(世界測地系)

緑色部分は  〃                        経度

実際にサイトで使用する場合、これらの値をサーバサイドで指定された市区町村によって書き換えて表示するようにした


MySQL で SELECT into outfile 出来なくてハマった件

 Windows上の MySQL で SELECT into outfile で CSVファイルをエクスポートしようとしてハマったので残しておく 環境 Windows10 Pro バージョン 1809 MySQL 8.4.0 という環境で SELECT * FROM table1...