読者です 読者をやめる 読者になる 読者になる

文字列リテラル

SQL Server Advent Calendar 3日目 です。

今日は、文字列リテラル(定数) です。
定数 (Transact-SQL)

文字列定数

基本は、「'」(シングルクォート)で囲みます。

select 'abc' -- abc
select 'あいうえお' -- あいうえお

文字列の途中に「'」がある場合は、「'」を重ねます。

select 'ab''c' -- ab'c
select 'あい''うえお' -- あい'うえお

文字列リテラルは、COLLATE で明示的に照合順序を指定しないと、データベースの照合順序が使われます。照合順序によって使われるコードページが変わります。SQL Azure*1 が出た当初、後述の N プレフィックスを付けないと文字化けする云々言われていましたね。

Unicode 文字列

文字列リテラルに N プレフィックスを付けると Unicode 文字列になります。Unicode 文字列は、照合順序に関わらずコードページの影響は受けません。

select 'あいう' collate SQL_LATIN1_GENERAL_CP1_CI_AS -- ??? (文字化け発生!)
select N'あいう' collate SQL_LATIN1_GENERAL_CP1_CI_AS -- あいう (文字化けしない!)

nchar/nvarchar なデータ型に insert する際は、ちゃんと N を付けて insert するようにしましょう!

照合順序とコードページのお話しはこちらが参考になります
照合順序と Unicode のサポート

*1:現在は SQL Database