我使用'utf-8‘字符集在macos上的mysql命令行中创建了一个表,
mysql> CREATE TABLE tb_stu (id VARCHAR(20), name VARCHAR(20), sex CHAR(1), birthday DATE) default charset=utf8;
Query OK, 0 rows affected (0.02 sec)
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| pet |
| tb_stu |
+----------------+
2 rows in set (0.00 sec)
mysql> show create table tb_stu \G
*************************** 1. row ***************************
Table: tb_stu
Create Table: CREATE TABLE `tb_stu` (
`id` varchar(20) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`birthday` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
我想在'tb_stu‘表中添加一些值,我有一个包含中文字符串的txt文件:
1 小明 男 2015-11-02
2 小红 女 2015-09-01
3 张三 男 2010-02-12
4 李四 女 2009-09-10
而且txt文件也是'utf-8‘字符集!
➜ ~ file /Users/lee/Desktop/JAVA/Java从入门到精通/第18章--使用JDBC操作数据库/Example_18_02/tb_stu.txt
/Users/lee/Desktop/JAVA/Java从入门到精通/第18章--使用JDBC操作数据库/Example_18_02/tb_stu.txt: UTF-8 Unicode text
因此,我执行mysql命令行:
mysql> LOAD DATA LOCAL INFILE '/Users/lee/Desktop/JAVA/Java从入门到精通/第18章--使用JDBC操作数据库/Example_18_02/tb_stu.txt' INTO TABLE tb_stu;
Query OK, 4 rows affected, 4 warnings (0.01 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 4
但我得到了mysql中混乱的代码:
mysql> select * from tb_stu;
+------+----------------+------+------------+
| id | name | sex | birthday |
+------+----------------+------+------------+
| 1 | å°æ˜Ž | ç | 2015-11-02 |
| 2 | å°çº¢ | å | 2015-09-01 |
| 3 | å¼ ä¸‰ | ç | 2010-02-12 |
| 4 | æŽå›› | å | 2009-09-10 |
+------+----------------+------+------------+
4 rows in set (0.00 sec)
这让我很困惑,mysql中的tabel和txt都是'utf-8‘字符集,为什么我会得到这么乱的代码?非常感谢!
发布于 2019-02-06 17:41:17
您需要进行更多的调查以了解您的问题。例如,其中一个选项是您的数据被正确地写入DB,但在命令行中,由于您的操作系统环境中的某些错误的编码设置,数据显示不正确。或者,问题可能是数据在写入时被篡改(损坏),这意味着它被错误地存储在数据库中。因此,我建议将您的原始文件与正确显示的中文字符转换成unicode序列,然后将DB中的数据转换成unicode序列,并进行比较,看看您的DB数据是否显示不正确或数据本身是否损坏。这将帮助您了解您的问题,然后找到解决问题的方法。以下是可以帮助您的工具:
有一个开源java库MgntUtils (由我编写),它有一个实用程序,可以将字符串转换为unicode序列,反之亦然:
result = "Hello World";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
此代码的输出为:
\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064
Hello World
该库可以在Maven Central或Github上找到,它以maven工件的形式提供,并带有源代码和javadoc
下面是类StringUnicodeEncoderDecoder的javadoc
https://stackoverflow.com/questions/54549142
复制相似问题