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

发布于 2024-12-07 12:24:39 字数 597 浏览 0 评论 0原文

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

My SQL query doesn't find cities that begin with for instance č, but does find cities which have č in their name but begin with regular English letters.

The City column in the database is of nvarchar type.

What is the solution for this problem?

I am using an SQLite database.

    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);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

停滞 2024-12-14 12:24:39

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

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

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

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

SQLite默认配置只支持不区分大小写
ASCII 字符的比较。这样做的原因是,做
完整的 Unicode 不区分大小写的比较和大小写转换
需要的表和逻辑几乎将大小增加一倍
SQLite 库。 SQLite 开发人员认为任何应用程序
需要完整的 Unicode 大小写支持 可能已经具备必要的条件
表和函数,因此 SQLite 不应该占用空间
复制此能力。

I think your problem might be related to unicode string in SQL Server. This might help

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

When dealing with Unicode string constants in SQL Server you must
precede all Unicode strings with a capital letter N, as documented in
the SQL Server Books Online topic "Using Unicode Data". The "N" prefix
stands for National Language in the SQL-92 standard, and must be
uppercase. If you do not prefix a Unicode string constant with N, SQL
Server will convert it to the non-Unicode code page of the current
database before it uses the string.

UPDATE: My mistake, I did not read the question correctly, I thought we were talking about SQL Server. Reading the SQL Lite documentation, http://www.sqlite.org/faq.html#q18

The default configuration of SQLite only supports case-insensitive
comparisons of ASCII characters. The reason for this is that doing
full Unicode case-insensitive comparisons and case conversions
requires tables and logic that would nearly double the size of the
SQLite library. The SQLite developers reason that any application that
needs full Unicode case support probably already has the necessary
tables and functions and so SQLite should not take up space to
duplicate this ability.

温暖的光 2024-12-14 12:24:39

这是解决方案:

parameterCity.Value = comboBoxCitySearch.Text;

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

WHERE LOWER(City) = LOWER(@City)

Here is solution:

parameterCity.Value = comboBoxCitySearch.Text;

Dont use C# function comboBoxCitySearch.Text.ToLower(); Just in SQL use:

WHERE LOWER(City) = LOWER(@City)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文