Web开发相关笔记 #05# MySQL中文无法匹配

时间:2022-03-15 10:27:46

2018-06-02

在 Class.forName 的时候记得先尝试 import 一下。

2018-06-04

1、JDBC SELECT 查询,中文条件查不出东西,可能是字符编码问题:

            String sql = "select reply from reply where words = ?";
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, words);
resultSet = preparedStatement.executeQuery();

检查  conn = DriverManager.getConnection("jdbc:mysql://123.123.82.66:3306/chat", "123", "123");

按如下修改 conn = DriverManager.getConnection("jdbc:mysql://123.123.82.66:3306/chat?characterEncoding=utf8", "123", "123");

2、存储过程插入中文数据乱码??!!方案来自:https://blog.csdn.net/qq_20948497/article/details/78535941

DROP PROCEDURE IF EXISTS insert_mapping;
DELIMITER //
CREATE PROCEDURE insert_mapping(
IN words_in VARCHAR () character set utf8,
IN reply_in VARCHAR () character set
utf8
)
BEGIN
-- 先通过查 id 判断是否已经存在 words ,存在,直接插入 reply,不存在插入 words 和 reply
DECLARE wid BIGINT DEFAULT 0;
SELECT words_id FROM words WHERE words_in=words INTO wid; IF wid = 0 THEN
INSERT INTO words(words) VALUES (words_in);
SELECT words_id FROM words WHERE words_in=words INTO wid;
INSERT INTO reply2(reply, words_id) VALUES (reply_in, wid);
ELSE
INSERT INTO reply2(reply, words_id) VALUES (reply_in, wid);
END IF;
END //
DELIMITER ;
-- 插入一些 数据
CALL insert_mapping('你好', '你好呢。');
CALL insert_mapping('你好', 'hi.');

3、命令行下插不了中文,JDBC却可以。

set name gbk; 即可。

2018-06-05

1、依然是连接 MySQL 中文没法匹配的问题,发现像下面那样修改一下就可以了:

mysql> SET character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)

不过这种修改是临时性的,要永久性更改需要修改 mysql 的配置文件,但是我没有找到那个配置文件,于是修改了 my.cnf 结果是 mysql 启动不了了 。。。