2

我在我的应用程序开发中使用了SQL Server& MySQLRDMS 数据库。我是sybase数据库的新手,我发现字符串搜索默认区分大小写,而 inSQL ServerMySQL它不是。
1. 是否有任何关于字符串搜索区分大小写的 SQL 标准?
2. 如果这个字符串列有唯一键索引,那么如果发现两行有相同的字符串但一个大写另一个小写,会有什么问题吗?

SELECT * FROM TABLE1 WHERE COL1 = 'Sample'
SELECT * FROM TABLE1 WHERE COL1 = 'sample'
4

3 回答 3

2
  1. 我认为这取决于CHARACTER SETcollation在 MySQL 中。默认字符集代表不latin1_swedish_ci区分ci大小写。您可以更改它以latin1_swedish_cs使其区分大小写。

    在 MySQL 和 SQL 服务器中,您可以在列、表、数据库和服务器级别设置字符集和排序规则。

    http://dev.mysql.com/doc/refman/5.5/en/case-sensitive.html

  2. 唯一索引将根据字符集和排序规则删除重复项。因此,如果您有,latin1_swedish_cs那么您将有两行用于“样品”和“样品”,而latin1_swedish_ci您将只有第一行“样品”。因此,数据库内的所有字符串比较(in WHERE, DISTINCT, GROUP BY)都将基于您设置的字符集和排序规则。

于 2012-08-10T07:18:36.593 回答
1

对于 Sybase ASE,您可能希望切换到nocase排序顺序。

   sp_helpsort  
  • 显示有关您当前字符集和排序顺序的信息

    select id, csid, name, descpription from master..syscharsets where type >= 2000

  • 这将显示可用排序顺序的列表

    sp_configure 'default sort order', *sortorder_id*

  • 是更改排序顺序的命令。对于 ISO_1(ISO-8859-1) 字符集,该值为“52”。此设置是静态的,因此必须重新启动数据库才能使其生效。

重启后,运行sp_indsuspect检查索引,运行sp_tab_suspectptn检查分区表。完成此操作后,您可以通过再次运行sp_helpsort检查您的更改。

在使用字符集/排序顺序时,确保您拥有数据库转储和数据的 BCP 副本非常重要。

于 2012-08-13T14:41:17.083 回答
0

如果你想在 sqlserver 中选择区分大小写的搜索..试试这个

SELECT User_Id FROM Table 
WHERE User_Id=@userid AND Password=@pwd COLLATE SQL_Latin1_General_CP1_CS_AS

这里@userid 和@pwd 是从用户发送到存储过程的参数。

于 2012-08-10T07:26:20.753 回答