Преобразование TXT-файла кодировки UTF-8 в MySQL не может отображаться правильно на MacOS - PullRequest
0 голосов
/ 06 февраля 2019

Я создаю таблицу в mysql на командной строке macos, используя кодировку 'utf-8',

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', у меня есть текстовый файл, содержащий китайский языкстрока:

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 и txt - оба кодировки 'utf-8', почему я получаю грязный код?Большое спасибо!

1 Ответ

0 голосов
/ 06 февраля 2019

Вам нужно будет еще кое-что изучить, чтобы понять вашу проблему.Например, одним из вариантов является то, что ваши данные были правильно записаны в БД, но в командной строке они просто отображаются некорректно из-за неправильной настройки кодировки в среде операционной системы.Или проблема может заключаться в том, что данные были искажены (повреждены), когда они были записаны, и это означает, что они неправильно хранятся в БД.Поэтому я бы предложил взять ваш исходный файл с правильно отображаемыми китайскими символами и преобразовать их в последовательность Unicode, а затем взять данные в БД, а также преобразовать их в последовательность Unicode и сравнить, чтобы увидеть, правильно ли отображаются данные вашей БД или данныесам по себе поврежден.Это поможет вам понять вашу проблему, а затем найти способ ее исправить.Вот инструмент, который может вам помочь:

Существует 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

Вот javadoc для класса StringUnicodeEncoderDecoder

...