sql >> データベース >  >> RDS >> Sqlserver

TSQLのヌル文字リテラルとは何ですか?

    Cade Rouxの回答には、置換が成功した場合(SQL照合が使用された場合)と失敗した場合(Windows照合が使用された場合)の2つの異なる動作があります。その理由は、使用される照合のタイプにあります。

    この動作は、ほぼ4年前にMicrosoftに提出されました:

    Q: NUL文字をreplace()で置換しようとすると、これは機能します。値にはSQL照合がありますが、Windows照合はありません。

    A: これは、0x0000がWindowscollat​​ionsの未定義の文字であるという事実によるものです。未定義の文字はすべて、比較、並べ替え、およびパターンマッチング中に無視されます。したがって、「a」+ char(0)の検索は、実際には「a」の検索であり、char(0)の検索は空の文字列と同等です。

    未定義の文字を処理する方法は少し混乱しますが、これはWindowsがそれらを並べ替えるために定義した方法であり、SQLServerは一般的なWindowsAPIに準拠しています。

    SQL照合では、未定義の文字の概念はありません。各コードポイントには重みが割り当てられているため、問題は発生しません。

    しかし残念ながら、それはまだ文書化されていません。

    したがって、唯一の解決策は、照合をSQL照合に変更することであるようです(例:SQL_Latin1_General_CP1_CI_AS 使用することもできます。

    以前の回答を不要として削除しました



    1. 小数点以下2桁の数値を書くSQLServer

    2. PL / SQLのループを使用して同じクエリを複数回実行するにはどうすればよいですか?

    3. MySQLVARCHARの長さとUTF-8

    4. AWSEC2からAWSRDSへのOracleデータベースの移行、パート4