位置:海鸟网 > IT > mySQL >

MySQL中文排序错误的解决方法

在MySQL中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在MySQL的很多版本中都存在。如果这个问题不解决,那么MySQL将无法实际处理中文。

  出现这个问题的原因是:MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象,一种解决方法是对于包含中文的字段加上"binary"属性,使之作为二进制比较,例如将"name char(10)"改成"name char(10)binary"。

二. 方法2 

  如果你使用源码编译MySQL,可以编译MySQL时使用--with--charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了。 

叶大马猴 回复于:2002-03-28 14:48:58--with--charset=gbk 
--with--charset=gb2312
哪个是好选择?

redfox 回复于:2002-03-29 08:59:40gbk

叶大马猴 回复于:2002-03-29 12:11:58后来查了,
默认的是latin1,
编译时用  extra-charsets=gb2312,gbk,
用,来分别加入多个字符集。

diekiss 回复于:2003-03-12 22:15:43win2k下装的mysql怎么修改、配置?

redfox 回复于:2003-03-12 23:04:26[quote:f4208708fe="叶大马猴"]后来查了,
默认的是latin1,
编译时用  extra-charsets=gb2312,gbk,
用,来分别加入多个字符集。[/quote:f4208708fe]gbk饱含gb2312

twos 回复于:2003-04-16 17:02:32my.ini中
[mysqld]
default-character-set=gb2312

uglyduck 回复于:2003-05-22 10:46:09"mysql在查询字符串时是大小写不敏感的,在编绎mysql时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中 
中文编码字符大小写转换造成了这种现象,比较应急的方法是对于包含中文的字段加上"binary"属性,使之作二进制比较, 
例如将"name char(10)"改成"name char(10)binary"."

boydreaming 回复于:2004-03-01 11:07:19[quote:837f7260a9="叶大马猴"]MySQL中文排序错误的解决方法 
作者: 奥索网  评价:  上站日期: 2001-12-29  
--------------------------------------------------------------------------------

  在MySQL中,进行中文排序和查找的时候,对..........[/quote:837f7260a9]

我发现在mysql 4.0里 ,如果编译--with-character=gbk的话,安装到mysql_install_db时,无法通过,提示说找不到gbk.xml。:(
于是,又下载了几个版本,也找不到这个文件。真奇怪。

如果解决啊?

jonny200 回复于:2004-12-14 11:58:23我的是rpm装的!
用了这个办法:"name char(10)"改成"name char(10)binary"."

可是不管用,怎么办?

jonny200 回复于:2004-12-17 08:31:48顶

iamfjun 回复于:2004-12-17 22:47:26观望

m0925j 回复于:2004-12-20 09:45:36在windows下试的时候,直接把default-character-set=gbk加到[mysqld]下面就可以了,可是我现在在AIX上的my.cnf的[mysqld]下面加上default-character-set=gbk就这样 
# ./safe_mysqld 
Starting mysqld daemon with databases from /var/lib/mysql 
041217 17:39:29 mysqld ended 
mysql起不来。。。 
怎么回事啊?

jo_fox 回复于:2004-12-20 15:28:51name char(10)"改成"name char(10)binary"

会导致windows下面mysql崩溃的

出错的时候看看/mydata目录下面的错误日至,里面有详细描述的

m0925j 回复于:2004-12-20 17:36:07刚看了mylib.err里面是这么说的:
041217 10:26:45  mysqld started
041217 10:26:45  Can't start server: Bind on TCP/IP port: Address already in use
041217 10:26:45  Do you already have another mysqld server running on port: 3306 ?
041217 10:26:45  Aborting

041217 10:26:45  /opt/freeware/libexec/mysqld: Shutdown Complete

041217 10:26:45  mysqld ended
我加上default-character-set=gbk就会这样,不加就能正常启动,为什么会跟什么TCP/IP扯上了啊

jo_fox 回复于:2004-12-21 11:46:28那是因为你的mysql还没停掉

先运行killall mysqld

m0925j 回复于:2004-12-21 15:23:43/opt/freeware/libexec/mysqld: File '/opt/freeware/share/mysql/charsets/gbk.conf' not found (Errcode: 2)
/opt/freeware/libexec/mysqld: Character set 'gbk' is not a compiled character set and is not specified in the '/opt/freeware/share/mysql/charsets/Index' file
041217 17:04:21  Aborting
呵呵,不好意思,搞错了,错误日志应该是这段。
请问要怎么添加那个gbk.conf文件啊,直接找个这个文件放到那个目录下面就可以了吗?我也找不到哪儿有这个东西下载