- 2017-3-19
- SQLServer
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」だと、検索やら日本語の文字化けやらちょっと困る。
例えば、こんなテーブルの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]ボタンを押下
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;
照合順序変更結果
確認してみる。
んな感じ。