mysqli_query("SET NAMES 'gb2312'")是什么意思?

mysqli_query("SET NAMES 'gb2312'")是什么意思?,第1张

mysqli_query("SET NAMES gb2312")是用来设置客户端的字符集的,与服务器端的字符集无关。

在连接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()

} 简单输入一些测试数据后可以发现,英文是正常的,而中文是乱码。

解决办法正在探索中,也希望各位能提出宝贵意见。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7537158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存