如何构建期末项目中的数据库

步骤

  1. 获取文件papers_with_predictions.csv

    可见仓库https://github.com/NJU-ymhui/big-data-analysis-final-classifier,位于main分支下的`mlp/`文件夹下

  2. 可以选择运行MySql手动在数据库中添加对应的数据表,也可以在配置文件application.yml中添加如下内容

    spring:  
    jpa:
    hibernate:
    ddl-auto: update
    database-platform: org.hibernate.dialect.MySQL5Dialect

    然后启动spring后端,这将会在数据库中自动创建数据表

    手动添加数据表的示例如下

    CREATE TABLE paper (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    abstract TEXT NOT NULL,
    category VARCHAR(50) NOT NULL,
    year INT NOT NULL
    );
  3. 执行mysql -u root -p登录数据库,之后执行下面的指令

    use database big_data_analysis; -- 请使用你自己的数据库名
    LOAD DATA INFILE 'path\\to\\your\\papers_with_predictions.csv'
    CHARACTER SET utf8mb4
    INTO TABLE paper
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS
    (title, abstract, category, @year, id)
    SET year = CAST(@year AS UNSIGNED);

可能遇到的问题

  1. ERROR 1074 (42000): Column length too big for column 'abstract' (max = 16383); use BLOB or TEXT instead
    

    字符串过长,执行

    ```sql
    ALTER TABLE paper MODIFY COLUMN abstract TEXT;
  2. ERROR 1406 (22001): Data too long for column 'abstract' at row 1
    

    解决方法同上

    3. ```sql
    No such file or directory
    确保路径中没有中文
  3. ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
    

    这是因为MySQL服务启用了`secure-file-priv`, 这将导致只能加载指定路径的文件

    使用`SHOW VARIABLES LIKE 'secure_file_priv';`查看输出,若输出

    ```sql
    +------------------+-------+
    | Variable_name | Value |
    +------------------+-------+
    | secure_file_priv | NULL |
    则说明没有任何路径(NULL)的文件可以加载,请找到MySQL配置文件`my.ini`或`my.conf`,通常位于MySQL的安装位置(比如我的在`E:\MySQL\mysql-8.0.36-winx64\mysql-8.0.36-winx64`下)或者`C:\\AppData\\MySQL\\对应版本`或`C:\\Program Files\\MySQL\\对应版本`下,编辑文件,在`[mysqld]`下添加规则
    secure-file-priv=""
    以此禁用`secure-file-priv` 之后重启MySQL 使用`win+x`以管理员身份运行终端,执行
    > net stop mysql
    > net start mysql
    启动成功后,再次登录MySQL,重复**步骤3**
  4. ERROR 1300 (HY000): Invalid utf8mb4 character string: '"..."'
    

    字符集不匹配,同4修改配置文件中所有涉及编码的地方为utf8,重启MySQL

    之后登录时`mysql -u root -p --default-character-set=utf8`指定字符集

    *注:如果还不行可能还需要把已经建好的数据库和数据表的字符集也改掉,使用*

    ```sql
    ALTER DATABASE big_data_analysis
    CHARACTER SET utf8
    COLLATE utf8_general_ci;

    ALTER TABLE paper
    CONVERT TO CHARACTER SET utf8
    COLLATE utf8_general_ci;
    如果还是不行(可能csv的数据被污染了),请使用https://github.com/NJU-ymhui/big-data-analysis-final-classifier下的`clean.py`清洗csv表格