sqlserver 中文簡繁體保存時注意的問題,無法解析 equal to 動作的定序衝突,亂碼
2009-08-12 09:14
399 查看
時常發生這樣的狀況:繁體數據庫,需要保存簡體的字符;或簡體的數據庫,保存繁體的字符。
解決方案是把欄位的屬性設定成nvarchar,或ntext,這樣據說數據庫是以unicode的字符保存的,所以能夠存儲各種字符,當然簡繁體都在內。
然而你會遇到另外一個問題:我是設定了欄位的屬性是nvarchar或是ntext,但是簡體字符保存到繁體欄位中,還是會出現亂碼。需要注意到的一個地方是,字符屬性的欄位,有個屬性叫“定序”(Collation),點開這個屬性,可以發現,如果是繁體的sql,字符默認的定序是windows定序:chinese_taiwan_stroke,如果是簡體的sql,則是:chinese_prc_stroke,該屬性也很奇妙,如果是兩個表之間的關聯,該屬性簡繁體的定序不一致,會導致關聯出錯。
例如:peono是people表簡體字符欄位,而新增了關聯表peo_relation,其中有也有一個peono欄位,則為繁體屬性,這時如果做關聯查詢,你的sql會出錯,
“無法解析 equal to 動作的定序衝突。”
解決方法就是修改這里的屬性,然而,有時不能輕率的修改它,因為它們可能有其他的關聯,
那么用另外的解決方法也可以實現這個關聯
declare @usid nvarchar(10)
set @usid = (select usid from tcomuser where pkid='1')
select @usid as c
select * from item_ex where creater = @usid
在存儲過程中定義過渡變量,利用該變量做關聯,或是利用程式和數據庫的相互調用實現,或更多,具體的方法看具體情況決定。
回來說說保存時亂碼的問題,也是這里的緣故,
這里的解決方法是:保存是在該字符欄位加上“N'”字符來實現字符集的轉換,n相當于程式中強制類型轉換的功能,它會把欄位格式化成unicode的編碼格式,然后再保存。
下面的語句保存,是有區別的:
[C# CODE]//未加“N'”
int j = 0;
for (int i = 1; i < this.gvdata.Rows.Count; i++)
{
string sql = "insert into item_ex(item, [desc], unit, category, spec";
sql += ")";
sql += "values(";
sql += "'" + gvdata.Rows[i].Cells[0].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[1].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[2].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[3].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[4].Text.Trim() + "' ";
sql += ")";
if(SC.MySqlBase.ExecuteSql(sql) > 0){
j++;
}
}
[/C# CODE]
[C# CODE]//加“N'”
int j = 0;
for (int i = 1; i < this.gvdata.Rows.Count; i++)
{
string sql = "insert into item_ex(item, [desc], unit, category, spec";
sql += ")";
sql += "values(";
sql += "'" + gvdata.Rows[i].Cells[0].Text.Trim() + "', ";
sql += "N'" + gvdata.Rows[i].Cells[1].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[2].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[3].Text.Trim() + "', ";
sql += "N'" + gvdata.Rows[i].Cells[4].Text.Trim() + "' ";
sql += ")";
if(SC.MySqlBase.ExecuteSql(sql) > 0){
j++;
}
}
[/C# CODE]
加了“N‘“,保存后不會出現亂碼,而且,在數據庫查詢到的結果,跟保存時的結果是一樣的字符
解決方案是把欄位的屬性設定成nvarchar,或ntext,這樣據說數據庫是以unicode的字符保存的,所以能夠存儲各種字符,當然簡繁體都在內。
然而你會遇到另外一個問題:我是設定了欄位的屬性是nvarchar或是ntext,但是簡體字符保存到繁體欄位中,還是會出現亂碼。需要注意到的一個地方是,字符屬性的欄位,有個屬性叫“定序”(Collation),點開這個屬性,可以發現,如果是繁體的sql,字符默認的定序是windows定序:chinese_taiwan_stroke,如果是簡體的sql,則是:chinese_prc_stroke,該屬性也很奇妙,如果是兩個表之間的關聯,該屬性簡繁體的定序不一致,會導致關聯出錯。
例如:peono是people表簡體字符欄位,而新增了關聯表peo_relation,其中有也有一個peono欄位,則為繁體屬性,這時如果做關聯查詢,你的sql會出錯,
“無法解析 equal to 動作的定序衝突。”
解決方法就是修改這里的屬性,然而,有時不能輕率的修改它,因為它們可能有其他的關聯,
那么用另外的解決方法也可以實現這個關聯
declare @usid nvarchar(10)
set @usid = (select usid from tcomuser where pkid='1')
select @usid as c
select * from item_ex where creater = @usid
在存儲過程中定義過渡變量,利用該變量做關聯,或是利用程式和數據庫的相互調用實現,或更多,具體的方法看具體情況決定。
回來說說保存時亂碼的問題,也是這里的緣故,
這里的解決方法是:保存是在該字符欄位加上“N'”字符來實現字符集的轉換,n相當于程式中強制類型轉換的功能,它會把欄位格式化成unicode的編碼格式,然后再保存。
下面的語句保存,是有區別的:
[C# CODE]//未加“N'”
int j = 0;
for (int i = 1; i < this.gvdata.Rows.Count; i++)
{
string sql = "insert into item_ex(item, [desc], unit, category, spec";
sql += ")";
sql += "values(";
sql += "'" + gvdata.Rows[i].Cells[0].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[1].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[2].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[3].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[4].Text.Trim() + "' ";
sql += ")";
if(SC.MySqlBase.ExecuteSql(sql) > 0){
j++;
}
}
[/C# CODE]
[C# CODE]//加“N'”
int j = 0;
for (int i = 1; i < this.gvdata.Rows.Count; i++)
{
string sql = "insert into item_ex(item, [desc], unit, category, spec";
sql += ")";
sql += "values(";
sql += "'" + gvdata.Rows[i].Cells[0].Text.Trim() + "', ";
sql += "N'" + gvdata.Rows[i].Cells[1].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[2].Text.Trim() + "', ";
sql += "'" + gvdata.Rows[i].Cells[3].Text.Trim() + "', ";
sql += "N'" + gvdata.Rows[i].Cells[4].Text.Trim() + "' ";
sql += ")";
if(SC.MySqlBase.ExecuteSql(sql) > 0){
j++;
}
}
[/C# CODE]
加了“N‘“,保存后不會出現亂碼,而且,在數據庫查詢到的結果,跟保存時的結果是一樣的字符
相关文章推荐
- 【Vegas原创】“無法解析 equal to 動作的定序衝突”错误的处理
- 【Vegas原创】“無法解析 equal to 動作的定序衝突”错误的处理
- 解決:無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Chinese_PRC_CI_AS" 之間的定序衝突
- Freemind 於 Ubuntu 11.10 中文無法輸入問題解法
- 使用JsonKit解析中文时注意事项
- php使用js保存的json cookie 字符串,然后解析成数组,需要注意的事项
- base圖片保存到sqlserver,讀取出來不一樣的問題
- 网络请求及数据解析(注意事项:带中文的需要转换) +从网络获取图片
- win eclipse 和 android studio 转 mac 注意点(解决找不到解析android-19.jar的报错)
- web中过滤器的顺序要注意,中文乱码问题
- 解决向sqlserver插入时中文乱码问题
- hibernate 保存大字段数据到数据库(sqlserver)
- [转]浅谈ACCESS数据库升迁SQLSERVER注意事项
- sqlserver设计表不允许保存更改,阻止保存要求重新创建表的更改
- 选取中文编码方案注意事项
- jQuery EasyUI中文解析
- PHP连接 SQLSERVER 注意事项(经典中的经典)
- 解析Qt4.7.3编译MySql数据库驱动,存中文乱码、过滤转义字符问题
- jquery eval解析JSON中的注意点介绍
- 解析 WEB 中所有 URL 的简单牛B代码,先保存起来,方式将来找不到了