具体问题如下:我安装mysql时设置的默认编码为gb2312,现在创建了一个数据库,名字为dba,该数据库里有两个表order和doc_citation,其中表order里面已经有一些数据,表doc_citation是空的,我想从一个文本文件(该文本文件已存为utf8编码)里面往表doc_citation导入数据,结果报2389行编码错误,我就去mysql安装目录下将my.ini文件里的
[mysql]default-character-set=utf8
做了这样的修改,通过执行如下命令
mysql> show variables like '%character%';
得到结果
character_set_client | utf8
character_set_connection | utf8
character_set_database | db2312
character_set_filesystem | binary
character_set_results | utf8
character_set_server | gb2312
character_set_sysgtem | utf8
结果执行导数命令第一行就报错,明显是编码问题
请问(1)目前数据库,两个表的编码方式是什么?
(2)我具体该如何做,才能将文本文件导入呢?欢迎大家给答案,很急!多谢!
[mysql]default-character-set=utf8
做了这样的修改,通过执行如下命令
mysql> show variables like '%character%';
得到结果
character_set_client | utf8
character_set_connection | utf8
character_set_database | db2312
character_set_filesystem | binary
character_set_results | utf8
character_set_server | gb2312
character_set_sysgtem | utf8
结果执行导数命令第一行就报错,明显是编码问题
请问(1)目前数据库,两个表的编码方式是什么?
(2)我具体该如何做,才能将文本文件导入呢?欢迎大家给答案,很急!多谢!
[mysql]default-character-set=utf8
重新启动MYSQL服务,按3楼步骤重新整理数据
Table: t_computer
Create Table: CREATE TABLE `t_computer` (
`c_id` double DEFAULT NULL,
`c_name` varchar(765) DEFAULT NULL,
`c_type` varchar(765) DEFAULT NULL,
`c_money` varchar(765) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
现在不就可以了。
REPLACE
INTO TABLE c
FIELDS
TERMINATED BY '#'
LINES
TERMINATED BY '\r'
方法导入的,现在的问题就是表是utf8编码,我将文本文件1.txt也是用utf8编码存储的,结果用Load data 命令执行不了,报告第一行就编码错误。
,用WINRAR压缩
在LOAD DATA这前,先执行一下 set names 'gbk';
`c_id` DOUBLE DEFAULT NULL,
`c_name` VARCHAR(765) DEFAULT NULL,
`c_type` VARCHAR(765) DEFAULT NULL,
`c_money` VARCHAR(765) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8LOAD DATA INFILE 'r://temp//doc_citation.txt'
REPLACE
INTO TABLE t_computer
FIELDS
TERMINATED BY '#'
LINES
TERMINATED BY '\r';
运行正常,
SHOW VARIABLES LIKE '%character%';Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir D:\\MySQL55\\share\\charsets\\
另外,我若通过一个辅助插件可视化方式建表,CREATE TABLE `t_computer` (
`c_name` VARCHAR(765) DEFAULT NULL,
`c_type` VARCHAR(765) DEFAULT NULL,
) ENGINE=INNODB DEFAULT CHARSET=utf8;
这样也是提示语法错误
如果CREATE TABLE `t_computer` (
`c_id` DOUBLE DEFAULT NULL,
`c_name` VARCHAR(765) DEFAULT NULL,
`c_type` VARCHAR(765) DEFAULT NULL,
PRIMARY KEY ('c_id')
) ENGINE=INNODB DEFAULT CHARSET=utf8;
这种方式建表就可以,可是如果这种方式建表,用load data导入数据时就提示少了一列啊,无法导入,因为doc_citation文件里就两列?
TRUNCATE `t_computer`;
LOAD DATA INFILE 'r://temp//doc_citation.txt'
REPLACE
INTO TABLE t_computer
FIELDS
TERMINATED BY '#'
(`c_name`,`c_type`)
SET c_id=1 ,`c_money`=''
;
SELECT * FROM `t_computer`在MYSQL中SELECT VERSION()
没有明白什么意思,执行TRUNCATE 'doc_citation'语句出错,语法错误
`c_id` DOUBLE DEFAULT NULL,
`c_name` VARCHAR(765) DEFAULT NULL,
`c_type` VARCHAR(765) DEFAULT NULL,
`c_money` VARCHAR(765) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
假设内容导入`c_name`,`c_type`
TRUNCATE `t_computer`;
LOAD DATA INFILE 'r://temp//doc_citation.txt'
REPLACE
INTO TABLE t_computer
FIELDS
TERMINATED BY '#'
(`c_name`,`c_type`)
SET c_id=1 ,`c_money`=''
;
SELECT * FROM `t_computer`注意是`t_computer`,直接COPY、PASTE
这部分是表示这两列的默认值吗?
我用楼上的方式建表,建不成,提示必须将'c_id'设为主键,是我mysql设置的问题吗
可以这样理解,因为你只要导入2列我用楼上的方式建表,建不成,提示必须将'c_id'设为主键,是我mysql设置的问题吗
不会吧,在MYSQL 5.5下测试没有问题
你的代码
`c_id` DOUBLE DEFAULT NULL,
`c_name` VARCHAR(765) DEFAULT NULL,
`c_type` VARCHAR(765) DEFAULT NULL,
`c_money` VARCHAR(765) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
代码建表啊,表名都不更改