mongodb 检测到非 ASCII 字符

1 投票
3 回答
2394 浏览
提问于 2025-04-17 08:21
> db.user.find()
terminate called after throwing an instance of 'mongo::UserException'
  what():  non ascii character detected
Wed Dec 14 13:29:38 mongo got signal 6 (Aborted), stack trace: 

Wed Dec 14 13:29:38 0x809d07d 0x8095cc3 0xa14400 0xa14416 0xa3fe71 0xa4334e 0x1be0b5 0x1bbfa5 0x1bbfe2 0x1bc14e 0x80ecd53 0x8117479 0x810c718 0x3c36f0 
 /usr/lib/mongodb/mongo(_ZN5mongo15printStackTraceERSo+0x2d) [0x809d07d]
 /usr/lib/mongodb/mongo(_Z12quitAbruptlyi+0x333) [0x8095cc3]
 [0xa14400]
 [0xa14416]
 /lib/i386-linux-gnu/libc.so.6(gsignal+0x51) [0xa3fe71]
 /lib/i386-linux-gnu/libc.so.6(abort+0x17e) [0xa4334e]
 /usr/lib/i386-linux-gnu/libstdc++.so.6(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x155) [0x1be0b5]
 /usr/lib/i386-linux-gnu/libstdc++.so.6(+0xabfa5) [0x1bbfa5]
 /usr/lib/i386-linux-gnu/libstdc++.so.6(+0xabfe2) [0x1bbfe2]
 /usr/lib/i386-linux-gnu/libstdc++.so.6(+0xac14e) [0x1bc14e]
 /usr/lib/mongodb/mongo(_ZN5mongo9uassertedEiPKc+0x183) [0x80ecd53]
 /usr/lib/mongodb/mongo(_ZN5mongo9Convertor8toStringEP8JSString+0x149) [0x8117479]
 /usr/lib/mongodb/mongo(_ZN5mongo12native_printEP9JSContextjPy+0x98) [0x810c718]
 /usr/lib/xulrunner-2.0/libmozjs.so(+0xac6f0) [0x3c36f0]

我插入到mongodb里的数据是用utf-8编码的,但当我在控制台使用db.user.find()时,出现了上面的错误。

我的操作系统是Ubuntu 11.04,mongodb是通过软件包管理器安装的。

3 个回答

0

这是我解决这个问题的方法。我运行了这个命令:

git clone https://github.com/mongodb/mongo.git
cd mongo
scons mongoshell

这个命令只会构建mongo的命令行工具,而不需要重新构建整个程序。

1

根据我看到的一些类似报告(在 http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packageshttp://groups.google.com/group/mongodb-user/browse_thread/thread/e8b858078101933d),问题可能是你的mongo或spidermonkey版本不支持UTF8编码。你可以尝试重新安装一下,或者从头开始构建看看这样是否能解决问题?

2

我刚遇到同样的问题。我的MongoDB 命令行版本是:1.8.2,运行在Ubuntu上(EC2)。

> db.tweets.find();

错误:检测到非ASCII字符

大家的共识是,升级到最新版本的MongoDB可以解决这个问题。

我通过输入以下命令检查了自己正在使用的MongoDB版本:

$ mongod --version

数据库版本 v1.8.2,pdfile版本4.5 - 星期三 10月24日 15:43:13 git版本:nogitversion

确认 MongoDB是否正在运行:

$ ps -deaf | grep mongod

mongodb 15408 1 0 6月06 ? 13:50:00 /usr/bin/mongod --config /etc/mongodb.conf

关闭MongoDB

$ ./mongo

> use admin

> db.shutdownServer()

服务器应该关闭了……

然后按照这些说明进行升级:如何在Ubuntu上安装MongoDB

将10Gen(MongoDB的创建者)的公钥添加到apt-get中,以便你信任他们的包:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

$ echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" >> /etc/apt/sources.list.d/10gen.list

更新你的软件包:

$ sudo apt-get update

安装10gen的MongoDB Debian/Ubuntu包:

$ sudo apt-get install mongodb-10gen

将要移除以下软件包: mongodb

将要安装的软件包: mongodb-10gen

如果你遇到错误,可以尝试:

$ apt-get autoremove

确认mongodb用户/组有权限写入数据目录:

$ sudo chown -R mongodb:mongodb /var/lib/mongodb/.

使用以下命令重启MongoDB:

$ mongod --fork --dbpath /var/lib/mongodb/ --smallfiles --logpath /var/log/mongodb.log --logappend

一旦你有了新的MongoDB版本,"非ASCII"字符的问题应该就解决了。:-)

撰写回答