ormlite用问号改变字符

时间:2015-02-28 13:50:50

标签: java mysql ormlite

我在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 '%?????%' )

为什么?

1 个答案:

答案 0 :(得分:0)

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 ? args的行为。

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

我最初认为这是MySQL的一个问题。也许你从服务器日志中得到了疑问?如果你得到了&#39; ?????&#39;从本地日志然后我不知道是什么问题。也许你的应用程序的默认字符编码?

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

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