MYSQL UTF8 UTF-8 GB2312 LATIN 乱码 MYSQL数据库中需要创建一些初始值,结果直接在MYSQL里面INSERT失败,最后觉得反正是用MYSQL导入SQL脚本方式运行,所以不如直接把SQL脚本存为UTF-8格式,导入后再页面显示正常。 www.shengfang.org mysql -V www.shengfang.org mysql Ver 14.7 Distrib 4.1.10a, for redhat-linux-gnu (i686) MySQL 4.1x之後的問題, www.shengfang.org 找了很久,才發現解決方法為 在mysql_connect的語法後加一句: mysql_query("set NAMES 'utf8'"); 或 mysql_query("set NAMES 'big5'"); (Depends on 你的encoding) CREATE TABLE `companys` ( www.shengfang.org `companyid` smallint(4) NOT NULL auto_increment, `companyname` varchar(40) character set utf8 collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (`companyid`), UNIQUE KEY `companyname` (`companyname`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ; UTF8页面正常 是 MYSQL不正常: www.shengfang.org +-----------+-------------+ | companyid | companyname | +-----------+-------------+ | 28 | 鏄? | +-----------+-------------+ insert into companys(companyname) values('行政部'); mysql 正常 29 | 行政部 页面 А??? insert into companys(companyname) values(convert('行是部' using utf8 )); mysql 30 | 行是部 www.shengfang.org А??? insert into companys(companyname) values(convert('行部' using gb2312)); 31 | ???? ???? /*公司机构表*/ CREATE TABLE companys( companyid SMALLINT(4) NOT NULL auto_increment, companyname varchar(40) NOT NULL, PRIMARY KEY (companyid), UNIQUE KEY companyname(companyname) )TYPE=MyISAM; www.shengfang.org
select convert(* using utf8) from companys; 在mysql中使用utf8编码,进行like查询时。如namelike'%c%'会将一些中文也搜索出来,虽然中文在里面显示时为乱码。这样会造成查询不精确。后查询mysql文档发现binary关键字。在like后加入binary即可实现精确的模糊查询。likebinary'%c%' 注:目前发现在like时使用c,e,a时会出现以上问题。因为mysql是用c语言写的。可能是utf8后编码的问题才会出现上述情况。还好解决了。希望能给有过同样问题的朋友一些帮助 MOONTOUCHER'S BLOG 字体:大 中 小 |