这两天在做一日志监控系统 用的是MySQL的数据库 出现了不少问题 在这里总结下 希望对大家有所帮助
第一:数据库中的日期字段用text 结果按日期查询时出现不少问题 可以用date(colname)函数解决
第二:数据库查询出现乱码 都是问号显示 在网上查询了好多代码 也修改了数据库的编码设置 字段的编码设置 C#数据库连接字符串的编码设置通通都不管用 最后给Connection连接加
上编码设置好了 示例代码如下:
//关键是字符串的配置
string connstr = Data Source= + Config database + ;Password= + Config password + ;User ID= + Config username + ;Location= + Config location + ;charset=gbk ;
conn = new MySQLConnection(connstr);
conn Open();
//关键代码 在连接打开后设置连接编码
MySQLCommand mand = new MySQLCommand( SET NAMES gbk conn);
mand ExecuteNonQuery();
//正常业务
string querySize = select count() from + Config table + where date(log_time)= + time + ;
MySQLCommand cmd = new MySQLCommand(querySize conn);
int count = ;
MySQLDataReader reader = cmd ExecuteReaderEx();
if (reader Read())
{
count = Convert ToInt (reader[ ] ToString());
lishixinzhi/Article/program/net/201311/11507
如果你只是为了检测查询结果乱码的问题的话,建议你先将代码修改成如下:
ClassforName("commysqljdbcDriver")newInstance();
String url = "jdbc:mysql://localhost:3306/b2buseUnicode=true&characterEncoding=UTF-8";
Connection con = DriverManagergetConnection(url, "root", "root");
//这是运行代码
//Connection con = SQLDBDB();
Statement st = concreateStatement();
//ResultSet rs = stexecuteQuery("select userid,username,company,avatar from b2b_member //where company like '%北京%'");
ResultSet rs = stexecuteQuery("select from b2b_member limit 0,10");
while (rsnext()) {
Systemoutprintln(rsgetInt("userid") + " : " + rsgetString("username"));
}
这样首先确保能从数据库中查询到结果,然后看包含有中文的记录是否乱码。
如果确实是中文乱码了,那么你应该看数据库表中对应记录的汉字内容是否在存储的时候就已经乱码了,如果数据库中的内容正常,而查询出来的结果乱码的话,基本上可以肯定数据库存储字段的数据格式跟你url的“utf8”格式拼配不上造成的;
如果这样检查了,数据库字段的存储格式也是"utf8",那么很有可能就是项目的编码格式不是造成java文件编译时,sql语句中的中文发生了乱码,比如myeclipse的默认编码格式就是"GBK";
php+mysql的utf-8中文乱码问题的解决方法
问题汇总:
1mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码
2MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码
3MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码
4用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码
5如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码
6PHP页面字符集不正确
7PHP连接MYSQL数据库语句指定的编码不正确
使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难了
针对不同问题的解决方法:
1mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码
修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令:
Alter DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8
2MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码
修改表的编码:
Alter TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将一个表category的编码改为utf8
3MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码
修改字段的编码:
Alter TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将test表中 dd的字段编码改为utf8
4用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP页面乱码
如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可
5如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码
这种情况也是修改页面charset即可
6PHP页面字符集不正确
为了避免PHP页面乱码的发生,PHP页面开始第一句
header("content-type:text/html; charset=utf-8");
//强行指定页面的编码,以避免乱码
7PHP连接MYSQL数据库语句指定的编码不正确
在连接数据库的语句中
mysql_connect('localhost','user','password');
mysql_select_db('my_db');
mysql_query("set names 'utf8'"); //select 数据库之后加多这一句
MySQL会出现中文乱码的原因不外乎下列几点:
1server本身设定问题。
2table的语系设定问题(包含character与collation)
3客户端程式(例如php)的连线语系设定问题强烈建议使用utf8。utf8可以兼容世界上所有字符!
一、避免创建数据库及表出现中文乱码和查看编码方法
1、创建数据库的时候:CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
2、建表的时候 CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这2个设置好了,基本就不会出问题了,即建库和建表时都使用相同的编码格式。
但是如果已经建了库和表可以通过以下方式进行查询。
1查看默认的编码格式:
mysql> show variables like "%char%";
+--------------------------+---------------+
| Variable_name | Value |
+--------------------------+---------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------------+
注:以前2个来确定,可以使用set names utf8,set names gbk设置默认的编码格式;
执行SET NAMES utf8的效果等同于同时设定如下:
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';
2查看test数据库的编码格式:
mysql> show create database test;
+------------+------------------------------------------------------------------------------------------------+
| Database | Create Database |
+------------+------------------------------------------------------------------------------------------------+
| test | CREATE DATABASE `test` /!40100 DEFAULT CHARACTER SET gbk / |
+------------+------------------------------------------------------------------------------------------------+
3查看yjdb数据库的编码格式:
mysql> show create table yjdb;
| yjdb | CREATE TABLE `yjdb` (
`sn` int(5) NOT NULL AUTO_INCREMENT,
`type` varchar(10) NOT NULL,
`brc` varchar(6) NOT NULL,
`teller` int(6) NOT NULL,
`telname` varchar(10) NOT NULL,
`date` int(10) NOT NULL,
`count` int(6) NOT NULL,
`back` int(10) NOT NULL,
PRIMARY KEY (`sn`),
UNIQUE KEY `sn` (`sn`),
UNIQUE KEY `sn_2` (`sn`)
) ENGINE=MyISAM AUTO_INCREMENT=1826 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC |
二、避免导入数据有中文乱码的问题
1:将数据编码格式保存为utf-8
设置默认编码为utf8:
set names utf8;
设置数据库db_name默认为utf8:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
设置表tb_name默认编码为utf8:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
导入:
LOAD DATA LOCAL INFILE 'C:\\utf8txt' INTO TABLE yjdb;
2:将数据编码格式保存为ansi(即GBK或GB2312)
设置默认编码为gbk:
set names gbk;
设置数据库db_name默认编码为gbk:
ALTER DATABASE `db_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
设置表tb_name默认编码为gbk:
ALTER TABLE `tb_name` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
导入:
LOAD DATA LOCAL INFILE 'C:\\gbktxt' INTO TABLE yjdb;
注:1UTF8不要导入gbk,gbk不要导入UTF8;
2dos下不支持UTF8的显示;
三、解决网页中乱码的问题
将网站编码设为 utf-8,这样可以兼容世界上所有字符。
如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为 GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK。
1编辑/etc/mycnf ,在[mysql]段加入default_character_set=utf8;
2在编写Connection URL时,加上useUnicode=true&characterEncoding=utf-8参;
3在网页代码中加上一个"set names utf8"或者"set names gbk"的指令,告诉MySQL连线内容都要使用utf8或者gbk。
以前的国外主机用的Mysql是4x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是50版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。
只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET
NAMES
UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET
NAMES
GBK,代码如下:
$mysql_mylink
=
mysql_connect($mysql_host,
$mysql_user,
$mysql_pass);
mysql_query("SET
NAMES
'GBK'");
首先写一个数据库test,然后写一个表table,最后插入你想要写入的字段"工资"。出现了了乱码。就得1 启动MySQL,在里面输入 ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin,将test数据库的编码设为utf8。2 修改表的编码:ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将一个表category的编码改为utf8 。3 修改字段的编码:直接在MySQL里右击表,然后点编辑表,在里面修改或输入代码: ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR ( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL。4得删除之前插入的字段之类的,再重新导入之前的字段
以上就是关于C# 乱码解决全部的内容,包括:C# 乱码解决、中文数据库查询乱码、PHP显示MySQL数据乱码,字符集设置都是UTF8,数据库也是UTF8,一直找不到问题在哪里,代码见详细,求大神等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)