2017-10-06 48 views
0

我有一个屏幕,用户可以看到英文单词并键入任何语言的等效翻译。即使将charset和collat​​ion更改为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 
+0

如何在字符的java读?我想你也应该展示java代码。 – Alex

+0

我直接将接收到的字符串插入到数据库表中,但那不是问题,即使当我插入表时,manualy问号只会插入,而不是重音字符。 – ppmakeitcount

+0

这听起来像你的_connection_不是“UTF-8”。查看[_this_]中的“问号”(https://stackoverflow.com/questions/38363566/trouble-with-utf-8-characters-what-i-see-is-not-what-i-stored)了解更多信息调试。 –

回答

0

你必须确保你使用了正确的编码在您的应用程序的每个阶段。最简单的方法通常是使用相同的编码,在你的情况下UTF-8。

要调试您的问题,您可以请按照下列步骤操作:

  1. 使用一个很好的文本编辑器如记事本++,打开一些你的JSON文件,并检查自己是否正确编码(即,如果俄罗斯/中文/任何字符显示正确),并检查编辑器是否已自动检测到JSON文件的编码为UTF-8。

    如果你没有源JSON数据作为文件,而是把它作为回应一些网络请求,然后尝试把它转储到一个文件中,使用工具,如wgetcurl,像上述检查该文件。

  2. 在已经读取用JAVA的JSON输入,进一步处理之前从内JAVA转储出输入。我不知道JAVA,但这是一个普遍的问题,你必须告诉你的编程语言/库/文件打开函数如何编码输入。

    如果你不这样做,JAVA可能会假定JSON输入是一些默认编码;如果出错,读入的数据将是垃圾。

    同样,在抛出所读过的内容之前,请告诉JAVA输出应如何编码。如果倾销到控制台,请确保控制台也使用您期望的编码。

    请注意,对于使用CGI机制的网络应用程序(几乎都是这样),也是如此。在这种情况下,标准输入和标准输出可被视为正常文件。

    当然,如果JAVA对文件和标准I/O的默认编码已经是UTF-8,那么您可以省略此步骤。

  3. 如果你还没有发现问题呢,告诉您发送UTF8编码数据的数据库驱动程序,并要得到UTF8编码数据。因为我不使用JAVA,所以我不知道该怎么做,但我确信它在文档中有描述。

  4. 如果还是不行,告诉MySQL的连接,客户端(已实施第3步后自动至于你的驱动程序不这样做)使用UTF-8。使用类似SET SESSION character_set_x = 'utf8'的陈述,其中x分别代表client,resultsconnection。连接到数据库后,您必须立即执行此操作(当然,只要驱动程序在连接时不会自动执行,取决于其运行时或静态配置)。

如果遵循这些步骤,你就会发现这个问题。让我们知道怎么回事。

0

UTF不保存其他语言像所有字符俄罗斯,中国,德国等 你可以参考Differences between utf8 and latin1

+0

不,这是部分错误。 MySQL的utf8可以处理所有欧洲字符和最常用的亚洲字符。 MySQL的utf8mb4与UTF-8相同,它处理一切。 –

相关问题