我在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 '%?????%' )
为什么?
答案 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连接器的更高版本的讨论,解决了检测数据库字符类型的问题。