【问题标题】:ormlite change characters with question marksormlite 用问号改变字符
【发布时间】:2015-02-28 13:50:49
【问题描述】:

我在 ormlite 和 Mysql 中使用以下查询:

String _textSearch="%اعصاب%";
Where<QuestionEntity, Long> _where= getDao().queryBuilder()).where();

List<QuestionEntity> _lst= _where.or(_where.like("title",_textSearch ),
    _where.like("questiontext", _textSearch)).query();

但生成以下查询:

SELECT * FROM `question`
    WHERE (`title` LIKE '%?????%' OR `questiontext` LIKE '%?????%' )

为什么?

【问题讨论】:

  • 了解如何配置 ormlite 以使用 utf8。
  • 您对查询的看法如何?在日志中?

标签: java mysql ormlite


【解决方案1】:
SELECT * FROM `question`
    WHERE (`title` LIKE '%?????%' OR `questiontext` LIKE '%?????%' )

嗯,我不确定这里有什么问题。我已将this UTF8 query-build test 添加到 ormlite-core 项目中,它通过了。

Foo foo = new Foo();
foo.stringField = "اعصاب";
dao.create(foo);
List<Foo> results = dao.queryBuilder().where()
   .like(Foo.STRING_COLUMN_NAME, foo.stringField).query();
assertEquals(foo.stringField, results.get(0).stringField);

这会生成以下日志输出:

SELECT * FROM `foo` WHERE `string` LIKE 'اعصاب' 

这也适用于SelectArg,这就是ORMLite? 参数的作用。

statement arguments: [اعصاب]
SELECT * FROM `foo` WHERE `string` LIKE ?

我最初认为这是 MySQL 的问题。也许您从服务器日志中获取了查询?如果你得到'?????'从本地日志然后我不确定问题是什么。可能是您的应用程序的默认字符编码?

测试使用的是 H2,它是一个原生 Java DB,因此可以轻松处理 Java 的字符串。也许看看这些 MySQL 问题/答案以获得帮助:

关于 MySQL 连接器的更高版本修复了检测数据库字符类型的问题的一些讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2015-06-17
    • 1970-01-01
    • 2019-05-14
    相关资源
    最近更新 更多