Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该如何在MySQL中使用UTF-8?_Java_Mysql_Mariadb - Fatal编程技术网

Java 我应该如何在MySQL中使用UTF-8?

Java 我应该如何在MySQL中使用UTF-8?,java,mysql,mariadb,Java,Mysql,Mariadb,我已将我的MariaDB设置为默认字符集UTF-8。根据,这样的设置可以避免像“é”这样无法识别的重音字符的问题 但是,, 我无法从中得到一些结果 SELECT title FROM tablename WHERE title = 'sometext' 其中某些文本不需要有重音字符 是否有处理utf8字符集的独特方法?因为它在java中似乎无法识别字符串 在Java代码中 String query = "SELECT title FROM tablename WHERE title=?";

我已将我的MariaDB设置为默认字符集UTF-8。根据,这样的设置可以避免像“é”这样无法识别的重音字符的问题

但是,, 我无法从中得到一些结果

SELECT title FROM tablename WHERE title = 'sometext'
其中某些文本不需要有重音字符

是否有处理utf8字符集的独特方法?因为它在java中似乎无法识别字符串

在Java代码中

String query = "SELECT title FROM tablename WHERE title=?";

PreparedStatement pState = conn.getPreparedStatement(query);
ResultSet result;
String textResult = null;

pState.setString(1, "sométéxt");
result = pState.executeQuery();

if(result.next())
  textResult= result.getString(1);

System.out.println(textResult);
输出:

null
其他方法

(一)

(二)

输出

null

字符集=utf8之前面临的问题

在Character Set=utf8之前,我对数据库的第一次设置是使用默认字符集拉丁语1_瑞典语ci。使用我的字段“tablename”数据类型=VARBINARY(),可以使用

SELECT * FROM tablename WHERE CONVERT(title USING utf8) = 'sometext'

但是,因为我的数据库有1000多万行。对整个“title”字段使用CONVERT函数会使SQL查询和Java程序运行得非常慢。

字符集的选择决定了文本信息的存储方式。但排序规则的选择决定了WHERE子句如何匹配该信息

试一试

如果这样做有效——如果您开始获取所需的行——请按如下所示更改tablename表中的标题列

   ALTER TABLE tablename1 
   CHANGE title title VARCHAR(xxxx) CHARACTER SET utf8 COLLATE utf8_general_ci NULL 
实际上,您应该使用标题列的现有定义,只需插入
collateutf8\u general\u ci
子句即可。完成此更改后,可能需要重建索引。但无论如何,你的匹配将开始正常工作


如果您使用的是一种特定的语言,您可能希望采用它自己的排序规则。例如,在常规排序规则中,N和ñ被视为同一个字母,但在西班牙语中,它们不是。

如果其他所有内容都设置为utf-8(将100%),则在写入db时尝试使用此选项:


我对Java非常陌生。如果我的问题中有不清楚的地方,请原谅我。:)请通过评论或编辑我的问题来帮助我。谢谢当我在代码中添加utf8\U unicode\U ci时,错误显示排序规则“utf8\U unicode\U ci”对“字符集'latin1'”无效。我根据此检查我的字符集,schemaCharSet=utf8,tableCharSet=binary&columnCharSet=null。我不知道我做错了什么?此错误意味着表中此列的字符集仍然是
latin1
。您尚未成功地在数据库中实际更改它。不要放弃:有时候需要一些摆弄才能把事情做好。使用
SHOW CREATE TABLE tablename
让您的MySQL服务器告诉您表的实际设置方式。由于我的表的字符集是二进制的,因此,我的数据最初是用默认字符集存储的(因为我没有指定列的字符集,MySQL的默认值是latin1),按照第23行中的方法将列转换为utf8,MySQL是否能够正确转换数据,因为必须使用我将列转换为]第一个指针的字符集转换二进制数据类型值?列具有字符集。表具有默认字符集。表的字符集实际上是二进制的吗?无论如何,您关心的列的字符集是什么?很抱歉,我太迂腐了,但是没有其他方法可以把这件事做好。Java字符串实例具有本机Unicode编码,MySQL接口软件(JDBC驱动程序)很好,因此当您将信息从MySQL读入Java时,它应该是您所期望的。你需要做一些实验来解决这些问题。
SELECT * FROM tablename WHERE CONVERT(title USING utf8) = 'sometext'
  SELECT title FROM tablename WHERE title=? COLLATE utf8_general_ci
   ALTER TABLE tablename1 
   CHANGE title title VARCHAR(xxxx) CHARACTER SET utf8 COLLATE utf8_general_ci NULL 
public String to_utf8(String fieldvalue) throws UnsupportedEncodingException{

        String fieldvalue_utf8 = new String(fieldvalue.getBytes("ISO-8859-1"), "UTF-8");
        return fieldvalue_utf8;
}