Hôm nay mình hướng dẫn mọi người thủ thuật tìm kiếm với Sql Server
không phân biệt chữ hoa, chữ thường, có dấu, không dấu rất đơn giản.
Mặc định khi tạo 1 column có kiểu dữ liệu nvarchar, thì Collation sẽ có giá trị SQL_Latin1_General_CP1_CI_AS.
Giải thích:
Đối với tiếng Anh, thì bạn sẽ không gặp vấn đề gì. Nhưng với tiếng Việt, thì bạn sẽ gặp vấn đề về dấu.
- SQL – Tất cả các collation đều có tiền tố là SQL.
- Latin1_General – đại diện cho quy tắc sắp xếp, CI có nghĩa là không phân biệt chữ hoa chữ thường và AS có nghĩa là trọng âm.
SELECT SERVERPROPERTY('collation')
Liệt kê collation của các column trong 1 table
sp_help <table-name>
Đối với tiếng Anh, thì bạn sẽ không gặp vấn đề gì. Nhưng với tiếng Việt, thì bạn sẽ gặp vấn đề về dấu.
VD: Bạn tìm kiếm chữ "Châu". Nếu bạn gõ chữ "Châu" hay "Chau" thì sẽ ra 2 kết quả tìm kiếm khác nhau.
Khắc phục
Bạn execute câu lệnh sql sau:ALTER TABLE <table-name> ALTER COLUMN <column-name> nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AI"
Trường hợp bạn sử dụng migration trong EF core:
Tạo mới 1 migration rỗng:
dotnet ef migrations add Collation
Sau đó, bạn thêm 2 câu lệnh SQL sau:
public partial class Collation : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("ALTER TABLE <table-name> ALTER COLUMN <colum-name> nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AI");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("ALTER TABLE <table-name> ALTER COLUMN <colum-name> nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS");
}
}
Chúc các bạn thành côngNhật ký học tập
VD chữ "Châu" là lấy trong 4 chữ "Đông Châu liệt quốc" của Phùng Mộng Long.
Trả lờiXóa