2

私はアプリ開発でSQL ServerMySQLRDMSデータベースを使用しました。私はsybaseデータベースを初めて使用します。このデータベースでは、文字列検索ではデフォルトで大文字と小文字が区別されますが、inSQL ServerとそうでMySQLはありません。
1.文字列検索の大文字と小文字の区別に関するSQL標準はありますか?
2.この文字列列に一意のキーインデックスがある場合、2つの行が同じ文字列であることがわかったが、1つは大文字で、もう1つは小文字であることがわかった場合、問題は発生しますか?

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

3 に答える 3

2
  1. MySQLに依存しているCHARACTER SETと思います。collationデフォルトの文字セットは、大文字と小文字を区別しないlatin1_swedish_ciことを表します。大文字と小文字を区別するようにci変更できます。latin1_swedish_cs

    MySQLサーバーとSQLサーバーの両方で、列、テーブル、データベース、およびサーバーレベルで文字セットと照合を設定できます。

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

  2. 一意のインデックスは、文字セットと照合に基づいて重複を削除します。したがって、があればlatin1_swedish_cs、「サンプル」と「サンプル」の2つの行がlatin1_swedish_ciあり、最初の行「サンプル」のみがあります。したがって、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 に答える