質問: new SQLite.Net.SQLiteConnection( plat, path); conn.Execute("CREATE TABLE IF NOT EXISTS sample1 ( id integer primary key, member_name text)"); conn.Execute("INSERT INTO sample1 (id,member_name) VALUES('1','aaa' )"); //これは問題なくinsertされる conn.Execute("INSERT INTO sample1 (id,member_name) VALUES('2','あああ' )"); //こっちはエラー } ``` ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/ee93e60086fbd94305a05b288fd07d56.png) 'あああ' の部分を、'あ'だけの1文字にすると、 SQLite.Net.SQLiteException: 'near " ": syntax error' なぜかシンタックスエラーになります...。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/42125e222389bbfabf270b3fd6f34532.png) 半角カタカナで'アアア'だとエラーは出ないのですが、 今度は文字化けします。 ↓エクセルにテーブル内容を出力したもの ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/2fd5947d7a29b88f416cb81064e3d19f.png) なぜなのでしょうか...?
回答: 試してないので分かりませんが、おそらく C# が UTF-16 でインサートしようとする為に発生しているのではと思います。 https://github.com/oysteinkrog/SQLite.Net-PCL/pull/294/commits/1c2b3c0f1c4bd66017484fbca412b869b0d93547 こちらの fork? だと直ってる様です。 ``` byte[] b = System.Text.UTF8Encoding.UTF8.GetBytes(s); conn.Execute(query, b); ``` この様にプリペアドステートメントからバイト列でインサートするとうまく行く気がします。 ※試していないので分かりません。