我正在使用 mysql 数据库。 DB是amazone RDS DB。
当我执行这个查询时:show global variables like '%character%';
我得到以下结果:
但是当我执行这个查询时:show variables like '%character%';
我得到这个结果:
如您所见,character_set_results 为空。我尝试了以下查询,但没有任何改变空值:
ALTER DATABASE myDB CHARACTER SET utf8;
ALTER DATABASE myDB CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER DATABASE myDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
SET CHARACTER_SET_RESULTS=UTF8
SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SET session CHARACTER_SET_RESULTS = utf8;
据我了解,第二个查询返回 session 参数。这会影响我得到的结果吗?
我有两台机器。我用 eclipse 运行应用程序的开发机器(这是一个带 hibernate 的 java 应用程序)和另一个,部署机器。在开发机器上一切正常,但在部署机器上有时我会得到 ????从数据库获取数据时或其他奇怪的字符。
两台机器都连接到同一个数据库,数据很好地存储在数据库本身中。
连接 url 也是 jdbc:mysql://myDB:3306/myApp?autoReconnect=true&useUnicode=true&createDatabaseIfNotExist=true&characterEncoding=utf-8
。
知道是什么原因造成的吗?
最佳答案
多个问号通常来自:
- 您是
INSERTTing
中文(或任何非西欧文本)。 - 您说
SET NAMES utf8
是为了声明客户端字节是 utf8 编码的(正确)。 - 但是表格列被声明为
CHARSET latin1
。 <-- 这就是问题所在。 - 由于无法将汉字转换为 latin1,'?'存储。
请提供SHOW CREATE TABLE
以确认上述假设。
如果您收到“其他奇怪字符”,请提供:
SELECT col, HEX(col) FROM ...
显示为“奇怪字符”存储的内容的示例。
关于java - character_result_set 在 mysql 中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679836/