clsConst.POINT_DATA_TABLE为一个DataTable,包含编号为1和①的记录各一条,如下代码
s="①";
string strSql = " 编号='" + s + "'";
DataRow[] drs = clsConst.POINT_DATA_TABLE.Select(strSql);
在.Net3.5下编译drs 包含一条记录,结果正确;
在.Net4.0下编译drs 包含2条记录(1、①的全查出来了),不正确!!
Why?
s="①";
string strSql = " 编号='" + s + "'";
DataRow[] drs = clsConst.POINT_DATA_TABLE.Select(strSql);
在.Net3.5下编译drs 包含一条记录,结果正确;
在.Net4.0下编译drs 包含2条记录(1、①的全查出来了),不正确!!
Why?
{
DataTable dt = new DataTable(); dt.Columns.Add("ID", Type.GetType("System.Int32"));
dt.Columns.Add("Name", Type.GetType("System.String")); DataRow dr = dt.NewRow();
dr["ID"] = 1;
dr["Name"] = Server.UrlEncode("1");
dt.Rows.Add(dr); DataRow dr1 = dt.NewRow();
dr1["ID"] = 2;
dr1["Name"] = Server.UrlEncode("①");
dt.Rows.Add(dr1); return dt;
} 这样1还是1,①就变成 %e2%91%a0 了
读的时候 Server.UrlDecode("%e2%91%a0")
INSERT @A SELECT '1' UNION ALL SELECT '①'
SELECT * FROM @A WHERE ID='1'DECLARE @B TABLE(ID VARCHAR(10) COLLATE Chinese_PRC_CI_AS)
INSERT @B SELECT '1' UNION ALL SELECT '①'
SELECT * FROM @B WHERE ID='1'/*(所影响的行数为 2 行)ID
----------
1
①(所影响的行数为 2 行)
(所影响的行数为 2 行)ID
----------
1(所影响的行数为 1 行)你可以指定你的排序规则是区分重音.就不会了
INSERT @A SELECT '1' UNION ALL SELECT '①'SELECT * FROM @A WHERE ID='1' COLLATE Chinese_PRC_CI_AS
SELECT * FROM @A WHERE ID='1' COLLATE Chinese_PRC_CI_AI/*
(所影响的行数为 2 行)ID
----------
1(所影响的行数为 1 行)ID
----------
1
①(所影响的行数为 2 行)
类似这样的写法.