SQL查询找不到以č,ć,š,ž等开头的城市

时间:2011-10-02 12:45:46

标签: c# sql sqlite character-encoding

我的SQL查询找不到以例如č开头的城市,但确实找到了名字中有č但以普通英文字母开头的城市。

数据库中的City列是nvarchar类型。

这个问题的解决方案是什么?

我正在使用SQLite数据库。

    cmdSQLite = new SQLiteCommand("SELECT RegistrationNumber, DocumentName, 
    Performer, BuiltYear, ReferatCardNumber , City, Municipalities , StreetName 
    FROM Geotest WHERE LOWER (City) = @City", connectionSQLite);

    SQLiteParameter parameterCity = new SQLiteParameter();
    parameterCity.Value = comboBoxCitySearch.Text.ToLower();
    parameterCity.ParameterName = "@City";
    cmdSQLite.Parameters.Add(parameterCity);

2 个答案:

答案 0 :(得分:2)

我认为您的问题可能与SQL Server中的unicode字符串有关。这可能会有所帮助

http://support.microsoft.com/kb/239530

  

在SQL Server中处理Unicode字符串常量时,必须这样做   在所有带有大写字母N的Unicode字符串之前,如中所述   SQL Server联机丛书主题“使用Unicode数据”。 “N”前缀   代表SQL-92标准中的国家语言,必须是   大写。如果不使用N,SQL为Unicode字符串常量添加前缀   服务器会将其转换为当前的非Unicode代码页   数据库在使用字符串之前。

更新:我的错误,我没有正确阅读问题,我以为我们在谈论SQL Server。阅读SQL Lite文档http://www.sqlite.org/faq.html#q18

  

SQLite的默认配置仅支持不区分大小写   ASCII字符的比较。这样做的原因是做到了   完全Unicode不区分大小写的比较和大小写转换   需要的表格和逻辑几乎要加倍   SQLite库。 SQLite开发人员认为任何应用程序都是如此   需要完整的Unicode案例支持可能已经有必要   表和函数,所以SQLite不应占用空间   复制这种能力。

答案 1 :(得分:0)

这是解决方案:

parameterCity.Value = comboBoxCitySearch.Text;

不要使用C#函数comboBox CitySearch.Text.ToLower();只是在SQL中使用:

WHERE LOWER(City) = LOWER(@City)