Nhibernate MySQL 添加数据时候乱码解决思路
Nhibernate MySQL 添加数据时候乱码
总是提示这个 mysql 用的编码是utf8_general_ci
是什么原因引起的会乱码 数据库的编码和Nhibernate里用的编码已经一样了 为什么还会出现乱码的情况?
请大神提出解决方案
------解决思路----------------------
引用博客:http://www.cnblogs.com/sukiwqy/archive/2010/01/29/1659046.html
第一解决方法:
乱码问题简单说就是数据库写入读取,网页文件,网页显示时几个环节的编码不一致造成的。
乱码问题
写入时:页面提取写入数据编码和写入数据库时编码不一致
读取时:读取后所用编码与数据库写入时不一致
显示时:编码与数据库读取后的数据不一致
很显然只有三者都统一才行:(以utf-8为例)
1:页面提交数据编码utf-8(这也可以算是显示页面编码),
2:数据库写入时编码:alter database db default character set ‘utf8’collate ‘utf8-general-ci’,
3:数据库读取时所用编码:mysql_query(“set names ‘utf8’”);
4:显示页面编码:<meta http-equiv="Content-type"content=“text/html, charset=utf-8”>
第二解决方法:
进入MYSQL命令行:
mysql> alter database you_dbname default character set 'utf8';
mysql> SET character_set_client='utf8';
mysql> SET character_set_connection='utf8'
mysql> SET character_set_results='utf8'
第三解决方法:
(暂时只针对MySQL 5.0.16 乱码问题处理办法,其他版本未测试。)
1 设置phpMyAdmin
Language:Chinese simplified (zh-utf-8)
MySQL 字符集:UTF-8 Unicode (utf8)
MySQL 连接校对:gbk_chinese_ci
2 创建数据库时
整理设置成 gbk_chinese_ci
3 用SQL建立表中
ENGINE=MyISAM DEFAULT CHARSET=gbk;
ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=40 ;
4 检查表结构中
varchar(100) 的整理属性为gbk_chinese_ci
其它类型的整理属性为空
5 代码中加上
$db->query("SET CHARACTER SET GBK"); Linux下需要,Windows下不需要
这个相当于Connection Character Sets and Collations
<object id="DbProvider" type="Spring.Data.Common.DbProviderFactoryObject,Spring.Data">
<property name="Provider" value="MySql-5.2.3"/>
<property name="ConnectionString" value="Server=192.168.1.99;initial catalog=NormalDataBase;User id =root;Password=123456;charset=utf8" />
</object>
<property name="HibernateProperties">
<dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.MySQL5Dialect"/>
<entry key="hibernate.connection.driver_class" value="NHibernate.Driver.MySqlDataDriver"/>
<entry key="hbm2ddl.keywords" value="none"/>
<entry key="connection.useUnicode" value="true"/>
<entry key="connection.characterEncoding" value="UTF-8"/>
</dictionary>
</property>
总是提示这个 mysql 用的编码是utf8_general_ci
是什么原因引起的会乱码 数据库的编码和Nhibernate里用的编码已经一样了 为什么还会出现乱码的情况?
请大神提出解决方案
------解决思路----------------------
引用博客:http://www.cnblogs.com/sukiwqy/archive/2010/01/29/1659046.html
第一解决方法:
乱码问题简单说就是数据库写入读取,网页文件,网页显示时几个环节的编码不一致造成的。
乱码问题
写入时:页面提取写入数据编码和写入数据库时编码不一致
读取时:读取后所用编码与数据库写入时不一致
显示时:编码与数据库读取后的数据不一致
很显然只有三者都统一才行:(以utf-8为例)
1:页面提交数据编码utf-8(这也可以算是显示页面编码),
2:数据库写入时编码:alter database db default character set ‘utf8’collate ‘utf8-general-ci’,
3:数据库读取时所用编码:mysql_query(“set names ‘utf8’”);
4:显示页面编码:<meta http-equiv="Content-type"content=“text/html, charset=utf-8”>
第二解决方法:
进入MYSQL命令行:
mysql> alter database you_dbname default character set 'utf8';
mysql> SET character_set_client='utf8';
mysql> SET character_set_connection='utf8'
mysql> SET character_set_results='utf8'
第三解决方法:
(暂时只针对MySQL 5.0.16 乱码问题处理办法,其他版本未测试。)
1 设置phpMyAdmin
Language:Chinese simplified (zh-utf-8)
MySQL 字符集:UTF-8 Unicode (utf8)
MySQL 连接校对:gbk_chinese_ci
2 创建数据库时
整理设置成 gbk_chinese_ci
3 用SQL建立表中
ENGINE=MyISAM DEFAULT CHARSET=gbk;
ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=40 ;
4 检查表结构中
varchar(100) 的整理属性为gbk_chinese_ci
其它类型的整理属性为空
5 代码中加上
$db->query("SET CHARACTER SET GBK"); Linux下需要,Windows下不需要
这个相当于Connection Character Sets and Collations