在连接mysql数据库时,为了防止现汉字乱码而使用的一个设置。
SET NAMES gb2312 相当于下面三条指令:
SET character_set_client = gb2312 客户端字符集
SET character_set_results = gb2312SELECT查询返回数据的字符集
SET character_set_connection = gb2312 客户端与服务器端连接采用的字符集
没有本质的区别。可以这样理解,gb2312_chinese_ci是默认的选项,gb2312_bin是可供选择的。或者说,gb2312_bin是gb2312_chinese_ci的子集。
我收集的mysql中文问题解决方案大全把D:\Program Files\MySQL\MySQL Server 5.0\my.ini
中的字符集改成utf8
default-character-set=utf8
然后一定要重启。不然不起作用
.net *** 作mysql中文字符乱码的问题
http://64.233.183.104/search?q=cache:dhstohOYqRIJ:www.yaosansi.com/blog/default.asp%3Fid%3D1116+mysql+.net+%E4%B8%AD%E6%96%87&hl=zh-CN&ct=clnk&cd=6&inlang=zh-CN
作者:yaosansi 日期:2007-08-29
字体大小: 小 中 大
/* 在使用MySql时会遇到中文乱码的问题就此写下面两个函数
* 在写入数据库和从数据库读出时将编码改变
* author:alice
* date :2006/1/25
*/
//写入数据库时进行转换
public string GB2312_ISO8859(string write)
{
//声明字符集
System.Text.Encoding iso8859, gb2312
//iso8859
iso8859 = System.Text.Encoding.GetEncoding("iso8859-1")
//国标2312
gb2312 = System.Text.Encoding.GetEncoding("gb2312")
byte[] gb
gb = gb2312.GetBytes(write)
//返回转换后的字符
return iso8859.GetString(gb)
}
//读出时进行转换
public string ISO8859_GB2312(string read)
{
//声明字符集
System.Text.Encoding iso8859,gb2312
//iso8859
iso8859= System.Text.Encoding.GetEncoding("iso8859-1")
//国标2312
gb2312 = System.Text.Encoding.GetEncoding("gb2312")
byte[] iso
iso = iso8859.GetBytes(read)
//返回转换后的字符
return gb2312.GetString(iso)
}
//批量数据转换
//其实就是将dataset的内容读出到xml文件,然后再输出
public DataSet ISO8859_GB2312(DataSet ds)
{
string xml
xml = ds.GetXml()
ds.Clear()
//声明字符集
System.Text.Encoding iso8859,gb2312
//iso8859
iso8859= System.Text.Encoding.GetEncoding("iso8859-1")
//国标2312
gb2312 = System.Text.Encoding.GetEncoding("gb2312")
byte[] bt
bt = iso8859.GetBytes(xml)
xml = gb2312.GetString(bt)
ds.ReadXml(new System.IO.StringReader(xml))
return ds
}
在读写的时候将上面的函数引用即可。在win2003+vs.net2005+mysql下调试通过。
-----------------------------------------------------------------------------------
为什么我的 Mysql 不支持中文查询?
Q:
我在写一个查询条件时的问题如下:
如我想写一个字段中包含“李”字的所有记录
$str="李"
select * from table where field like '%$str%'
显示的记录中除了包含”李”字的记录,还有不包含“李”字的记录。为什么?
A:
在MySQL中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在MySQL的很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。
出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。
方法一:
解决方法是对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。
方法二:
如果你使用源码编译MySQL,可以编译MySQL时使用--with--charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了。
方法三:
可以使用 Mysql 的 locate 函数来判断。以上述问题为例,使用方法为:
SELECT * FROM table WHERE locate(field,'李') >0
本站使用的就是这种方法,感觉还不错。:P
方法四:
把您的Select语句改成这样,SELECT * FROM TABLE WHERE FIELDS LIKE BINARY '%FIND%'即可!
---------------------------------------------------
MySql中的ODBC驱动与.NET驱动的中文异常
Mysql为ODBC和.NET分别提供了特定的数据库驱动程序,分别为:
(1)MySQL Connector/Net -- for connecting to MySQL from .NET
(2)Connector/ODBC - MySQL ODBC driver
我使用的版本是:MySQL Connector/Net 5.0和MySQL Connector/ODBC 3.51,数据库版本是:MySQL - 5.0.22。
近来在使用中发现,假设混合使用这两种数据库驱动程序储存/读取中文的时候,是会出现异常的。
简单的测试代码如下:
简单测试页面
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>简单测试</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Retrieve data via Odbc..
<asp:GridView ID="gridOdbc" runat="server">
</asp:GridView>
<hr />
Retrieve data via Mysql..
<asp:GridView ID="gridMysql" runat="server">
</asp:GridView>
<hr />
Name:<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<br />
EnglishName:<asp:TextBox ID="txtEnglishName" runat="server"></asp:TextBox>
<hr />
<asp:Button ID="btnOdbc" runat="server" Text="Input data via Odbc" OnClick="btnOdbc_Click" />
<asp:Button ID="btnMysql" runat="server" Text="input data via Mysql" OnClick="btnMysql_Click" />
</div>
</form>
</body>
</html> 代码简单使用两个GridView,通过不同的数据库驱动程序连接数据库,读取数据。数据分别使用两种方式录入。
读取数据
//使用ODBC读取数据
private void OdbcGetData()
{
OdbcConnection conn = new OdbcConnection(ConfigurationManager.ConnectionStrings["odbc"].ConnectionString)
string sql = "select * from coding"
OdbcDataAdapter da = new OdbcDataAdapter(sql, conn)
DataSet ds = new DataSet()
da.Fill(ds, "coding")
gridOdbc.DataSource = ds
gridOdbc.DataBind()
}
//使用NET读取数据
private void MysqlGetData()
{
MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Mysql"].ConnectionString)
string sql = "select * from coding"
MySqlDataAdapter da = new MySqlDataAdapter(sql, conn)
DataSet ds = new DataSet()
da.Fill(ds, "coding")
gridMysql.DataSource = ds
gridMysql.DataBind()
}
录入数据
录入数据
//使用ODBC录入数据
protected void btnOdbc_Click(object sender, EventArgs e)
{
OdbcConnection conn = new OdbcConnection(ConfigurationManager.ConnectionStrings["odbc"].ConnectionString)
string sql = string.Format("insert into coding(id,name,englishname) values(null,\'{0}\',\'{1}\')", txtName.Text, txtEnglishName.Text)
OdbcCommand cmd = new OdbcCommand(sql, conn)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
OdbcGetData()
MysqlGetData()
}
//使用NET录入数据
protected void btnMysql_Click(object sender, EventArgs e)
{
MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Mysql"].ConnectionString)
string sql = string.Format("insert into coding(id,name,englishname) values(null,\'{0}\',\'{1}\')", txtName.Text, txtEnglishName.Text)
MySqlCommand cmd = new MySqlCommand(sql, conn)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
OdbcGetData()
MysqlGetData()
} 简单输入一些测试数据后可以发现,英文是正常的,而中文是乱码。
解决办法正在探索中,也希望各位能提出宝贵意见。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)