Web开发笔记 #05# MySQL中文无法匹配
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 (100) character set utf8, IN reply_in VARCHAR (300) 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 启动不了了 。。。