命令行导入mysql乱码解决

http://www.jb51.net/article/26167.htm


方法二: 在命令行导入乱码解决 

1. use database_name; 
2. set names utf8; (或其他需要的编码) 
3. source example.sql (sql文件存放路径) 

<think>好的,用户想通过命令行将CSV文件导入MySQL中。我需要先回忆一下相关的方法,并确保步骤正确。首先,我记得LOAD DATA INFILE语句可以用于从文件导入数据到数据库表中。但用户可能需要注意文件路径、字段分隔符、权限等问题。 接下来,我需要确认LOAD DATA INFILE的语法。基本结构应该是这样的:指定文件路径、确定字段分隔符和行终止符,比如CSV通常用逗号分隔,换行符可能是\n。还需要处理可能的列顺序不一致的情况,可能需要使用FIELDS TERMINATED BY和LINES TERMINATED BY子句。 然后,用户可能需要创建目标表,或者确保表结构匹配CSV文件的列。例如,如果CSV有列名,是否需要在导入时跳过标题行,使用IGNORE 1 ROWS。另外,还要注意字符编码的问题,避免乱码,可能需要指定CHARACTER SET参数。 还有,用户权限的问题。使用LOAD DATA INFILE需要文件权限,可能还需要在MySQL配置中设置local_infile为1,特别是如果用户使用本地文件的话。如果用户没有权限,可能需要用mysqlimport工具,或者调整MySQL的配置。 另外,如果用户遇到secure-file-priv的问题,需要检查MySQL的该变量设置的路径,确保CSV文件在该目录下,或者调整配置文件。这也是常见的问题之一。 还需要考虑字段值的处理,比如某些字段是否需要用引号括起来,这时候可以使用ENCLOSED BY参数。如果CSV中有转义字符,可能需要指定ESCAPED BY。 最后,给出一个具体的例子,包括创建表的语句和导入命令,这样用户可以直接参考。比如,假设有一个CSV文件,包含id, name, price三列,对应的表结构需要匹配,然后使用LOAD DATA INFILE导入,并指定逗号分隔,忽略标题行等。 另外,可能需要提醒用户常见的错误和解决方法,比如路径错误、权限不足、列数不匹配等。确保用户能够顺利执行步骤,并处理可能出现的问题。 总结一下,步骤应该是:1. 准备CSV文件和表结构;2. 使用LOAD DATA INFILE命令,指定正确的参数;3. 处理权限和路径问题;4. 验证导入结果。同时,给出示例代码和常见问题解答会更有帮助。</think>通过命令行将CSV文件导入MySQL数据库,主要使用`LOAD DATA INFILE`语句或`mysqlimport`工具。以下是具体方法和示例: --- ### **方法一:使用`LOAD DATA INFILE`语句** #### **步骤说明** 1. **准备CSV文件和目标表** 确保CSV文件列顺序与MySQL表字段顺序一致,或通过指定字段名匹配。例如创建表: ```sql CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(255), price DECIMAL(10,2) ); ``` 2. **执行导入命令** 在MySQL命令行中运行: ```sql LOAD DATA INFILE '/path/to/products.csv' INTO TABLE products FIELDS TERMINATED BY ',' -- CSV字段分隔符(默认\t) ENCLOSED BY '"' -- 字段包围符(默认空) LINES TERMINATED BY '\n' -- 行终止符(默认\n) IGNORE 1 ROWS; -- 跳过CSV标题行(若存在) ``` 3. **处理特殊字符集** 若CSV文件编码为UTF-8,需添加字符集声明: ```sql LOAD DATA INFILE '/path/to/products.csv' INTO TABLE products CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' IGNORE 1 ROWS; ``` --- ### **方法二:使用`mysqlimport`工具** #### **步骤说明** 1. **准备CSV文件** 文件需与目标表同名(例如表`products`对应文件`products.csv`)。 2. **执行导入命令** 在系统命令行中运行: ```bash mysqlimport --ignore-lines=1 --fields-terminated-by=, --local -u root -p db_name /path/to/products.csv ``` - `--ignore-lines=1`: 跳过标题行 - `--local`: 从客户端读取文件(需权限) - `-u root -p`: 指定用户名和密码 --- ### **常见问题与解决方案** 1. **权限错误** - 错误提示`ERROR 1290 (HY000): The MySQL server is running with --secure-file-priv` 需将CSV文件放入MySQL允许的目录(通过`SHOW VARIABLES LIKE 'secure_file_priv';`查询路径)或修改`my.cnf`配置文件[^1]。 2. **字段不匹配** - 若CSV列名与表字段名不一致,需在`LOAD DATA INFILE`中指定列顺序: ```sql LOAD DATA INFILE '/path/to/file.csv' INTO TABLE products FIELDS TERMINATED BY ',' (csv_column1, csv_column2, @ignore_column) -- 映射CSV列到表字段 SET table_column1 = csv_column1; ``` 3. **导入速度优化** - 添加`LOCAL`关键字从客户端读取文件(但需启用`local_infile`参数)[^2]。 --- ### **示例完整流程** 1. 创建表: ```sql CREATE TABLE employees ( emp_id INT, name VARCHAR(50), department VARCHAR(50) ); ``` 2. 导入CSV文件(假设文件路径为`/var/lib/mysql-files/employees.csv`): ```sql LOAD DATA INFILE '/var/lib/mysql-files/employees.csv' INTO TABLE employees FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值