gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:28:49 24 4
gpt4 key购买 nike

我已将 MariaDB 设置为默认字符集 UTF-8。根据Blue Box Blog Character Set Hell ,这样的设置可以解决无法识别的重音字符(如“é”)的问题。

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

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

其他方法

1)

String query = "SELECT title FROM tablename WHERE CONVERT(title USING utf8)=?";

2)

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

byte[] req = "sométéxt".getBytes("UTF-8");
pState.setBytes(1,req);

输出

null
<小时/>

Char Set=utf8 之前遇到的问题

在字符集 = utf8 之前,我对数据库的第一次设置是使用默认字符集 latin1_swedish_ci。使用我的字段 'tablename' datatype=VARBINARY(),可以使用

解决无法识别的重音
SELECT * FROM tablename WHERE CONVERT(title USING utf8) = 'sometext'

但是,因为我的数据库有超过1000万行。在整个“标题”字段上使用CONVERT函数会使SQL查询和Java程序运行速度非常慢。

最佳答案

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

尝试

  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

您实际上应该使用标题列的现有定义,然后放入 COLLATE utf8_general_ci 子句。进行此更改后,您可能需要重建索引。但无论如何,您的匹配将开始正常工作

如果您使用特定语言,您可能希望采用其自己的排序规则。例如,在一般排序规则中,N 和 Ñ 被视为同一字母,但在西类牙语中则不然。

关于java - 我应该如何在 MySQL 中使用 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17226426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com