LocalDBの照合順序を変更する(データベース レベル)

  • デル株式会社
  • Visual Studioや、Microsoft SQL Server Management Studioの(以下SSMS)、
    デフォルト設定で新規にLocalDBを作成した場合、照合順序が

    「 SQL_Latin1_General_CP1_CI_AS 」

    となっています。
    これは、LocalDBインスタンスの照合順序が「SQL_Latin1_General_CP1_CI_AS」に設定されているために起こります。

    照合順序[SQL_Latin1_General_CP1_CI_AS]

    照合順序が「SQL_Latin1_General_CP1_CI_AS」だと、検索やら日本語の文字化けやらちょっと困る。
    例えば、こんなテーブルのvarcharカラムへ

    日本語を挿入して、表示してみると

    INSERT INTO	
     Table_1(NAME)
    VALUES	
     ('文字列てすと');
    
    SELECT * FROM Table_1;
    
    

    こんな感じで文字化ける。
    これを回避するには、varcharをnarcharに変更する、
    照合順序を変更、SQLで取得時になんとかするとか。。。色々。。

    長々書きましたが、今回はLocalDBの照合順序変更します。(意外に簡単)
    LocalDBインスタンスの照合順序は、仕様で変更できなが、 データベースレベル、列レベル、
    および式レベルの照合順序は変更できるため、データベースレベルで変更する。

    ※LocalDBの仕様については、「SQL Server 2016 Express LocalDB」参照
    ※既にテーブルを作成している場合は、カラムの照合順序を変更する必要がある。



    照合順序の変更

    照合順序の変更は、SSMSでデータベースのプロパティで変更するか、
    SQLで変更する。

    SSMSで照合順序を変更する

    1.対象のデータベースを選択後、右クリックし[プロパティ]を選択する。
    2.[データベースのプロパティ]画面で左ペインの[オプション]を選択。
    3.照合順序を変更した照合順序へ変更(今回は、Japanese_XJIS_100_CI_AI_WS)し[OK]ボタンを押下

    1.対象のデータベースを選択後、右クリックし[プロパティ]を選択する。

    2.[データベースのプロパティ]画面で左ペインの[オプション]を選択。

    3.照合順序を変更した照合順序へ変更(今回は、Japanese_XJIS_100_CI_AI_WS)し[OK]ボタンを押下

    SQLで照合順序を変更する

    1.SQLを発行する。

    -- ALTER DATABASE [データベース(mdf)のフルパス] COLLATE Japanese_XJIS_100_CI_AI_WS
    
    -- 例
    ALTER DATABASE [E:\TEST_DB.mdf] COLLATE Japanese_XJIS_100_CI_AI_WS
    
    -- フルパスは
    -- SELECT DB_NAME() で取得できる
    
    
    カラムの照合順序変更

    既にテーブルを作成してしまった場合は、残念ながら対象のカラムを修正する。

    -- ALTER TABLE [テーブル名] 
    --      ALTER COLUMN [カラム名] 
    --      varchar(50)COLLATE Japanese_XJIS_100_CI_AI_WS;
    
    -- 例
    ALTER TABLE dbo.Table_1 
    ALTER COLUMN NAME varchar(50)COLLATE Japanese_XJIS_100_CI_AI_WS;
    
    



    照合順序変更結果

    確認してみる。

    んな感じ。

    関連記事

    ページ上部へ戻る