【问题标题】:SQL query doesn't find cities that begin with č, ć, š, ž, etcSQL 查询找不到以 č、ć、š、ž 等开头的城市
【发布时间】:2011-10-02 12:45:45
【问题描述】:

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

【问题讨论】:

  • 城市的首字母大写。也许在您的查询中只使用小写字母?
  • 我把city放在小写前面,没问题。
  • 我认为你应该用大写或小写来包装大小写相等的两个部分......

标签: c# sql sqlite character-encoding


【解决方案1】:

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

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

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

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

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

【讨论】:

  • OP 询问的是 SQLite,而不是 SQL Server。
【解决方案2】:

这里是解决方案:

parameterCity.Value = comboBoxCitySearch.Text;

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

WHERE LOWER(City) = LOWER(@City)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2016-08-30
    • 2012-01-19
    • 2014-07-11
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多