MySQL中文排序错误的解决方法
时间:2007-02-17 来源:PHP爱好者
MySQL中文排序错误的解决方法
作者: 奥索网 评价: 上站日期: 2001-12-29
--------------------------------------------------------------------------------
在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文件啊,直接找个这个文件放到那个目录下面就可以了吗?我也找不到哪儿有这个东西下载
php爱好者站 http://www.phpfans.net 文章|教程|下载|源码|论坛.
作者: 奥索网 评价: 上站日期: 2001-12-29
--------------------------------------------------------------------------------
在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文件啊,直接找个这个文件放到那个目录下面就可以了吗?我也找不到哪儿有这个东西下载
php爱好者站 http://www.phpfans.net 文章|教程|下载|源码|论坛.
相关阅读 更多 +