之前我曾问过这个问题,但由于我没有收到任何指南,我再次问它。 这是原始问题: fail to insert non-english characters to database using crontab to run the program
我编写了一个java程序,它从UTF-8文件中读取并将其内容插入到mysql数据库中。我可以在终端中调用jar文件,它工作正常。之后我使用crontab自动运行程序,但这次只有英文字符和数字会插入数据库。
我的数据库编码是“utf8-general-ci”,我正在运行该程序的服务器是centOs 6.3。
我应该提一下,我有另一个程序,它的功能与此类似,并且工作正常。
我测试了很多东西,但没有一个能解决这个问题。我不知道是什么问题。
我正在寻找解决方案或任何线索来继续解决问题。我会感激任何帮助。
编辑: mysql版本是:5.1.69
这是2张图片。一个是我用crontab运行程序,另一个是在终端
中运行程序时
答案 0 :(得分:0)
我不是真正的专家,但这里什么都没有。 我认为这与http://dev.mysql.com/doc/refman/5.6/en/alter-table.html
中记录的内容有关你的默认字符集是在latin1上还是类似的东西?也许你把它保留为默认值,我认为它然后使用latin1。
无论如何,我认为你必须做这样的事情:
ALTER TABLE target_table_name MODIFY latin1_text_col TEXT CHARACTER SET utf8;
ALTER TABLE target_table_name MODIFY latin1_varchar_col VARCHAR(M) CHARACTER SET utf8;
您可以通过执行以下操作找到数据库的默认字符集:
use db_name;
show variables like "character_set_database";
show variables like "collation_database";
答案 1 :(得分:0)
我无法找到解决问题的方法所以我写了一个运行应用程序的调度程序,它运行正常!!!
但我仍然感到困惑,为什么crontab会出现这个问题,或者我做了什么,程序运行不正常!!!
答案 2 :(得分:0)
假设您已使用utf8mb4设置了数据库,表和列,请不要忘记 使用utf8字符集指定您与mysql的连接:
String url = "jdbc:mysql://ip:port/db?characterEncoding=utf8";
String username = "xxx";
String password = "xxx";
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
-
我也很好奇您的问题的根本原因...