【问题标题】:mongodb non ascii character detected检测到 mongodb 非 ascii 字符
【发布时间】:2012-10-26 06:19:01
【问题描述】:
> 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是通过包管理器安装的

【问题讨论】:

  • Ascii 不是 unicode。您可能只需要更改数据库上的编码。不知道如何在 mongodb 中执行此操作
  • mongodb 将每个字符串作为 unicode 存储在其数据库中,无需转换。也许你的例外是因为控制台编码?
  • @FelixYan 我尝试使用 unicode string ,也不起作用。
  • 你有没有尝试在 python 中使用 pymongo 做find()?

标签: python mongodb


【解决方案1】:

刚刚遇到同样的问题。 MongoDB shell 版本:1.8.2 on Ubuntu (EC2)

> db.tweets.find();

错误:检测到非 ascii 字符

共识是升级到最新版本的 MongoDB 将解决该问题。

通过发出命令检查我运行的是哪个版本的 MongoDB:

$ mongod --version

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

确认 mongo 当前是否正在运行:

$ ps -deaf | grep mongod

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

致Shutdown MongoDB

$ ./mongo

> 使用管理员

> db.shutdownServer()

服务器应该关闭了...

然后按照以下说明进行升级:How to Install MongoDB on Ubuntu

将第 10 代(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 更新

安装 10gen 的 MongoDB Debian/Ubuntu 软件包:

$ sudo apt-get install mongodb-10gen

以下软件包将被删除: mongodb

将安装以下 NEW 软件包: mongodb-10gen

如果遇到错误,请尝试:

$ apt-get 自动删除

确认 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”字符问题就应该消失了。 :-)

【讨论】:

  • 谢谢!这也为我修好了
【解决方案2】:

根据我看到的一些类似报告(http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages 和 http://groups.google.com/group/mongodb-user/browse_thread/thread/e8b858078101933d) 似乎问题可能是您的 mongo/spidermonkey 版本缺乏 UTF8 支持。也许尝试全新安装或从头开始构建,看看是否能解决问题?

【讨论】:

    【解决方案3】:

    这就是我为解决这个问题所做的。我运行了命令:

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

    这将只构建 mongo shell,而无需进行完整的重建。

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 2016-04-09
      • 2014-01-25
      • 2015-07-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2013-05-27
      相关资源
      最近更新 更多