我的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);
答案 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)