MySQL采坑记

MySQL版本:8.0.15
操作系统:Windows 10

ERROR 1148 (42000): The used command is not allowed with this MySQL version

将本地文件导入数据库时,使用命令LOAD DATA LOCAL INFILE,遇到上述错误,这是因为mysql默认关闭本地文件导入功能,Security Issues with LOAD DATA LOCAL

解决方法
登录mysql后,输入命令:set global local_infile = 'ON';
退出,重新登录:mysql --local-infile=1 -u root -p

ERROR 2 (HY000): File 'D:pet.txt' not found (OS errno 2 - No such file or directory)

在练习文件导入时,使用命令LOAD DATA LOCAL INFILE "D:\pet.txt" INTO TABLE pet;遇到了这个错误,而文件确实存放在D盘下,其实只是反斜杠号的问题,应该写两个

解决方法
LOAD DATA LOCAL INFILE "D:\\pet.txt" INTO TABLE pet;

ERROR 1300 (HY000): Invalid utf8mb4 character string: ''

导入带中文字符的txt文件到mysql时,遇到上述错误。txt文件的默认编码格式为ANSI,而数据库的编码格式在初始化时一般会设置成utf-8(实际上我在安装MySQL 8.0时,按照提示改成了UTF8MB4),导入英文数据时没有发现问题,但是导入中文数据时就遇到了错误

解决方法
将txt文件保存为utf-8格式:打开txt文件 -> 文件 -> 另存为 -> 编码选择utf-8

外键约束

以 为PROJECT的DNO属性添加DEPARTMENT表的DNO外键为例

  1. 建表时添加
    在CREAT TABLE语句括号内添加FOREIGN KEY(DNO) REFERENCES DEPARTMENT(DNO)
  2. 建表后添加
    ALTER TABLE PROJECT ADD CONSTRAINT FOREIGN KEY(MGRSSN) REFERENCES DEPARTMENT(DNO);
  3. 删除外键约束
    ALTER TABLE table_name DROP FOREIGN KEY constraint_name
    其中约束名(constraint_name)通过命令SHOW CREAT TABLE table_name查看

C/C++相关

简单的连接MySQL的程序:

#include 
#include 

int main(int argc, char **argv)
{
    MYSQL mysql_conn; /* Connection handle */

    if (mysql_init(&mysql_conn) != NULL)
    {
        printf("Init succeeds!\n");
    }
    else
    {
        printf("Init fails!\n");
    }
    return 0;
}

编译命令:gcc mysql.c -o mysql.exe -I D:/mysql/include -L D:/mysql/lib -l libmysql
-I 后是头文件的位置
-L 后是库文件的位置
-l 后是库名,用来指定程序要链接的库,不加上可能会遇到错误:undefined reference to mysql_init

编译成功以后,若直接在cmd上运行,会提示由于找不到libmysql.dll,无法继续执行代码,若在PowerShell上运行没有提示但程序不能正常运行

需要从MySQL安装目录下lib文件夹里面的libmysql.lib和bin文件夹里面的libeay32.dll两个文件复制到项目文件夹中。

若只复制libmysql.lib,在cmd上运行会提示无法定位序数3283于动态链接库 ..\libmysql.dll 上,在PowerShell上运行没有提示但程序不能正常运行,在Git Bash上可以正常运行

参考
Mac下MySQL中LOAD DATA INFILE出现The used command is not...

你可能感兴趣的:(MySQL采坑记)