让Sqlite3以GB2312编码存储汉字

Sqlite3内部采用UTF8存储,但是为转成GB2312就必须调用编码函数,太麻烦了,于是今天琢磨出一种让sqlite3内部存储汉字采用GB2312的方法,将字段设为BLOB,然后保存汉字的GB2312编码的字节数组就OK了。但是把词库的所有字段从TEXT转换成BLOB,结果查询时用 where word = ’hello’竟然无法查询出结果,随手改成 where word like ’hello’ 竟然可以,估计是BLOB无法用"="查询。

using System;
using System.Text;
using System.Data;
using Finisar.SQLite;

namespace SqliteConvert
{
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: 在此处添加代码以启动应用程序
            //

            
            //打开以前的库
            SQLiteConnection sqliteConn = new SQLiteConnection(@"Data Source=d:projectDrEye.db;New=False;Compress=True;Version=3;"); 
            sqliteConn.Open();
            SQLiteDataAdapter sqliteDa = new SQLiteDataAdapter("select * from DrEye",sqliteConn);
            DataSet sqliteDs = new DataSet();
            sqliteDa.Fill(sqliteDs);


            //创建新库
            SQLiteConnection sqliteConnNew = new SQLiteConnection(@"Data Source=d:projectDrEye.new1.db;New=True;Compress=True;Version=3"); 
            sqliteConnNew.Open();
            
            //建表
            SQLiteCommand sqliteCmdNew = sqliteConnNew.CreateCommand();
            sqliteCmdNew.CommandText = "CREATE table DrEye (word TEXT Primary Key,explanation BLOB,InflectedForm BLOB)"; 
            sqliteCmdNew.ExecuteNonQuery();

            //插入数据
            SQLiteDataAdapter sqliteDaNew = new SQLiteDataAdapter("select * from DrEye", sqliteConnNew);
            SQLiteCommandBuilder sqliteCbNew = new SQLiteCommandBuilder(sqliteDaNew);
            
            DataSet sqliteDsNew = new DataSet();
            sqliteDaNew.Fill(sqliteDsNew);

            Console.WriteLine(sqliteDs.Tables[0].Rows.Count);
            Console.WriteLine(sqliteDsNew.Tables[0].Rows.Count);
                        
            foreach(DataRow dr in sqliteDs.Tables[0].Rows)
            {
            
                
                DataRow sqliteDrNew = sqliteDsNew.Tables[0].NewRow();
                sqliteDrNew[0] = dr[0];
                sqliteDrNew[1] = EncodingConvert(dr[1].ToString());
                if (dr[2].ToString() != "")
                {
                    sqliteDrNew[2] = EncodingConvert(dr[2].ToString());
                }
                sqliteDsNew.Tables[0].Rows.Add(sqliteDrNew);
                break;
            }
            sqliteDaNew.Update(sqliteDsNew);


            Console.WriteLine("Game over!");
            Console.ReadLine();
        }

        //将字符串转换成字节
        static byte[] EncodingConvert(string utf8String)
        {
                    
            byte[] ansiCode;
            ansiCode = Encoding.Default.GetBytes(utf8String);
            return ansiCode;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值