[
新規
] - [
ツリー
] - [
スレッド
] [
未解決
] [
緊急
] - [
優先
] - [
検索
] - [
なでしこTOP
]
「なでしこv1」開発掲示板
なでしこv1のバグや要望を書き込む掲示板
→
書き込み(
#3137
)を編集する:
名前
タイトル
本文
【症状】SQLite3内の日本語文字を含むデータをSELECTで正常に取り出せない 【再現方法】 例えば SQLITE3自動変換はオン お客様番号=「AA123456」 部署名=「開発部」 氏名=「鈴木 一郎」 郵便番号=「222-1111」 住所1=「品川区▲■●●3-2-1」 # 会社名=「有限会社鈴木」 # 問題が発生する。 # 会社名=「有限会社オープン」 # 問題が発生する 会社名=「有限会社OpenAI」 # 問題が発生する #会社名=「TEST」 # 問題が発生する # 会社名=「」 # 問題が発生する。 # 住所2=「ネコマンション 201」# 問題が発生しない 住所2=「ネコマンション 201 南部屋」# 問題が発生する で SQL_STR = 「INSERT INTO {DB_テーブル名} ({koumoku}) VALUES ("{お客様番号}","{会社名}","{部署名}","{氏名}","{郵便番号}","{住所1}","{住所2}");」 DBHでSQL_STRをSQLITE3実行 をして DBHで「SELECT * FROM {DB_テーブル名} LIMIT 0, 200;」をSQLITE3実行 DB_CSV=それ DB_CSVを「test_db.csv」に保存 DBHのSQLITE3閉じる DB_CSVを言う。 を行うと、吐き出されたCSVファイルには ==ここから ユーザーID,会社名,所属、役職,氏名,郵便番号1,住所1,住所2 AA123456,有限会社OpenAI,開発部,"鈴木 一郎 enAI",222-1111,品川区▲■●●3-2-1,"ネコマンション 201 南部屋 " ==ここまで と名前の部分が「鈴木 一郎 enAI」となっていたり、Shift_JISの文字コードにないものが混ざってしまう。 また、 会社名=「TEST」 に変更して実行した場合は、生成されるCSVは空っぽになり何も結果が得られない状況になります。 尚、INSERTやUPDATE等でデータベースを操作する部分では問題が確認できませんでした。 また、DB Browser for SQLite で生成されたDBは正しい値のものが入っていて 最後に、SELECTでなでしこ経由で取り出そうとしたものが正常に取り出せない問題です。 【要望】SQLITE3実行での結果を正しいものにしてほしい 本来であればテストコードで、正しいCSVデータが取得できるはず。 【バージョン】1.588及び、1.591 【その他】 尚、本件事象の回避策としては、SQLite3の32bit ODBC Driverをインストールして なでしこからODBC経由で「ADO開く」を使い作れば、文字化け系の問題は発生しないことが確認できました。 よろしくお願いします。 以下、上記再現に使ったテストに使ったコード ==== # SQLite3 初期設定 SQLITE3自動変換はオン DBとは文字列 SQL_STRとは文字列 SQL結果は配列 # koumoku = 「db00,db01,db02,db03,db04,db05,db06」 koumoku = 「ユーザーID,会社名,所属、役職,氏名,郵便番号1,住所1,住所2」 DB_テーブル名 = 「cus_csv_tbl_00」 #SQL_テーブル作成 = 「CREATE TABLE {DB_テーブル名}(ユーザーID,会社名,所属、役職,氏名,郵便番号1,住所1,住所2);」 SQL_テーブル作成 = 「CREATE TABLE {DB_テーブル名}({koumoku});」 SQL_テーブル削除 = 「DROP TABLE {DB_テーブル名};」 DB = 「test.db」 DBH = DBをSQLITE3開く DBHで「SELECT COUNT(*) FROM sqlite_master WHERE TYPE='table' AND name='{DB_テーブル名}';」をSQLITE3実行 SQL結果はそれ 「テーブル有り:{SQL結果[1]}」を言う。 # SQL結果[0] には、「COUNT(*)」、SQL結果[1] には 0 か 1 が得られる。 もし、(SQL結果[1]=0)ならば # テーブル作成 DBHでSQL_テーブル作成をSQLITE3実行 # とにかく毎回作り直す DBHでSQL_テーブル削除をSQLITE3実行 # DROP DBHでSQL_テーブル作成をSQLITE3実行 # CREATE お客様番号=「AA123456」 部署名=「開発部」 氏名=「鈴木 一郎」 郵便番号=「222-1111」 住所1=「品川区▲■●●3-2-1」 # 会社名=「有限会社鈴木」 # 問題が発生する。 # 会社名=「有限会社オープン」 # 問題が発生する 会社名=「有限会社OpenAI」 # 問題が発生する #会社名=「TEST」 # 問題が発生する # 会社名=「」 # 問題が発生する。 # 住所2=「ネコマンション 201」# 問題が発生しない 住所2=「ネコマンション 201 南部屋」# 問題が発生する SQL_STR = 「INSERT INTO {DB_テーブル名} ({koumoku}) VALUES ("{お客様番号}","{会社名}","{部署名}","{氏名}","{郵便番号}","{住所1}","{住所2}");」 DBHでSQL_STRをSQLITE3実行 # 上記までの結果は、DB Browser for SQLite で確認して意図した結果が保存されていることが確認できる # しかし、下記のSELECTで取得したCSVはDB内容とは異なる結果となる問題が発生する # 出力されたcsvが空だったり、文字化けしたり、想定しない文字コードが含まれたものになる。 # 秀丸エディタでcsvを開こうとすると、「NULL文字を空白に変換して読み込みました。」と警告がでる。 # この短いコードの時は、むしろ正しいcsvを取得可能なデータパターンが全く見つけられない結果になった。 # SQLITE3自動変換はオフ # この場合、UTF-8のCSVが出力されるだけで、Shift_JISの結果と同じく正しくない結果が得られる DBHで「SELECT * FROM {DB_テーブル名} LIMIT 0, 200;」をSQLITE3実行 # ほとんど結果は正しいものが得られない? # DBHで「SELECT 住所2 FROM {DB_テーブル名};」をSQLITE3実行 # 住所2=「ネコマンション 201 南部屋」の時、「南部屋」の後ろにゴミが入る DB_CSV=それ DB_CSVを「test_db.csv」に保存 DBHのSQLITE3閉じる DB_CSVを言う。 終わり
優先度
低
中
高
緊急
状態
未処理
詳細求む!
調査中
議論中
修正中
確認待ち
再修正依頼
解決
---
重複
---
アイデア
感想
告知
感謝
確認キー
👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。
編集キー
編集時に使うキーを入力(省略可能)
添付ファイル
🎁
ファイルを選択...
画像ファイル(最大300KB)を添付可能