即使将charset和collation更改为utf8后,也不能将中文,俄文等字符存储到mysql表中
我有一个屏幕,用户可以看到英文单词并键入任何语言的等效翻译。即使将charset和collation更改为utf8后,也不能将中文,俄文等字符存储到mysql表中
我的数据库创建查询:
CREATE DATABASE IF NOT EXISTS lang_db
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
我的表的创建语句:
CREATE TABLE lang_map (
WORD VARCHAR(2048) NULL,
DESCRIPTION VARCHAR(2048) NULL
) CHARACTER SET utf8 COLLATE utf8_general_ci;
我得到的JSON字和说明,我在java中读取,然后触发一个查询插入到表。但对于像中文或俄文这样的语言,只有插入的东西是?
's。
MySQL版本:5.5 的Java:1.6
更新: Java代码:
控制器处理Ajax调用。
@ResponseBody
public setChanges(@RequestBody JSONObject keyValueMap) throws Exception {
return myService.setChanges(keyValueMap);
}
服务代码
List<LangMapping> langMappings = new ArrayList<LangMapping>();
for(Object keyObject : changedKeyValueMap.keySet()){
String key = String.valueOf(keyObject) ;
String description = (String) changedKeyValueMap.get(key);
langMappings.add(buildLangMapping(key,localeCode,description)); //pojo
}
//using above array list i am inserting into database table
你必须确保你使用了正确的编码在您的应用程序的每个阶段。最简单的方法通常是使用相同的编码,在你的情况下UTF-8。
要调试您的问题,您可以请按照下列步骤操作:
使用一个很好的文本编辑器如记事本++,打开一些你的JSON文件,并检查自己是否正确编码(即,如果俄罗斯/中文/任何字符显示正确),并检查编辑器是否已自动检测到JSON文件的编码为UTF-8。
如果你没有源JSON数据作为文件,而是把它作为回应一些网络请求,然后尝试把它转储到一个文件中,使用工具,如wget
或curl
,像上述检查该文件。在已经读取用JAVA的JSON输入,进一步处理之前从内JAVA转储出输入。我不知道JAVA,但这是一个普遍的问题,你必须告诉你的编程语言/库/文件打开函数如何编码输入。
如果你不这样做,JAVA可能会假定JSON输入是一些默认编码;如果出错,读入的数据将是垃圾。
同样,在抛出所读过的内容之前,请告诉JAVA输出应如何编码。如果倾销到控制台,请确保控制台也使用您期望的编码。
请注意,对于使用CGI机制的网络应用程序(几乎都是这样),也是如此。在这种情况下,标准输入和标准输出可被视为正常文件。
当然,如果JAVA对文件和标准I/O的默认编码已经是UTF-8,那么您可以省略此步骤。如果你还没有发现问题呢,告诉您发送UTF8编码数据的数据库驱动程序,并要得到UTF8编码数据。因为我不使用JAVA,所以我不知道该怎么做,但我确信它在文档中有描述。
如果还是不行,告诉MySQL的连接,客户端(已实施第3步后自动至于你的驱动程序不这样做)使用UTF-8。使用类似
SET SESSION character_set_x = 'utf8'
的陈述,其中x
分别代表client
,results
或connection
。连接到数据库后,您必须立即执行此操作(当然,只要驱动程序在连接时不会自动执行,取决于其运行时或静态配置)。
如果遵循这些步骤,你就会发现这个问题。让我们知道怎么回事。
UTF不保存其他语言像所有字符俄罗斯,中国,德国等 你可以参考Differences between utf8 and latin1
不,这是部分错误。 MySQL的utf8可以处理所有欧洲字符和最常用的亚洲字符。 MySQL的utf8mb4与UTF-8相同,它处理一切。 –
如何在字符的java读?我想你也应该展示java代码。 – Alex
我直接将接收到的字符串插入到数据库表中,但那不是问题,即使当我插入表时,manualy问号只会插入,而不是重音字符。 – ppmakeitcount
这听起来像你的_connection_不是“UTF-8”。查看[_this_]中的“问号”(https://*.com/questions/38363566/trouble-with-utf-8-characters-what-i-see-is-not-what-i-stored)了解更多信息调试。 –