具体问题如下:我安装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)我具体该如何做,才能将文本文件导入呢?欢迎大家给答案,很急!多谢!

解决方案 »

  1.   

    贴出你的 show create table 
      

  2.   

    修改了my.ini文件后,你重启数据库了吗?
      

  3.   

    就去mysql安装目录下将my.ini文件里的  
    [mysql]default-character-set=utf8
    重新启动MYSQL服务,按3楼步骤重新整理数据
      

  4.   

    *************************** 1. row ***************************
           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)
      

  5.   

    把现有的表结构导出,修改字符集重新建表不就可以了。建表不就可以了,把utf8修改
    现在不就可以了。
      

  6.   

    你的表是 CHARSET=utf8的,你用什么方法进行导入的?
      

  7.   

    回复:我是用LOAD DATA   INFILE 'D:\1.txt'
    REPLACE
        INTO TABLE c
         FIELDS
             TERMINATED BY '#'
             LINES
    TERMINATED BY '\r'
    方法导入的,现在的问题就是表是utf8编码,我将文本文件1.txt也是用utf8编码存储的,结果用Load data 命令执行不了,报告第一行就编码错误。
      

  8.   

    刚才写错了,文本文件的名字是doc_citation.txt,也是用uft8编码存储的
      

  9.   

    你用支持UTF8的编辑软件,比如WORD、ULTREEDIT之类的打开TXT文件,另存为GBK、GB2312这类的试试
      

  10.   

    上传TXT文件到www.access911.net/csdn
    ,用WINRAR压缩
      

  11.   


    在LOAD DATA这前,先执行一下 set names 'gbk';
      

  12.   

    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=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\\
      

  13.   

    我建表的时候 VARCHAR(765)是不行的,我之前两个字段用的是TEXT类型,难道是我mysql版本低?
      

  14.   

    error 1064(42000): you have an error in your sql syntax
    另外,我若通过一个辅助插件可视化方式建表,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文件里就两列?
      

  15.   

    TXT文件中应该有几列要导入表中,MYSQL版本是什么
      

  16.   

    就两列,doc_citatin文件的每一行是两列,用'#'分割的,mysql版本是 administrator 1.2.3 rc
      

  17.   

    我之前建的do_citation表,里面就两个字段,一个是'title' TEXT NOT NULL和'citation' TEXT NOT NULL
      

  18.   

    假设内容导入`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`在MYSQL中SELECT VERSION()
      

  19.   

    mysql 版本是5.0.45-community-nt
    没有明白什么意思,执行TRUNCATE 'doc_citation'语句出错,语法错误
      

  20.   

    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;
    假设内容导入`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
      

  21.   

    我只需要两列,SET c_id=1 ,`c_money`=''
    这部分是表示这两列的默认值吗?
    我用楼上的方式建表,建不成,提示必须将'c_id'设为主键,是我mysql设置的问题吗
      

  22.   

    这部分是表示这两列的默认值吗?
    可以这样理解,因为你只要导入2列我用楼上的方式建表,建不成,提示必须将'c_id'设为主键,是我mysql设置的问题吗
    不会吧,在MYSQL 5.5下测试没有问题
    你的代码
      

  23.   

    就是用你的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;
    代码建表啊,表名都不更改
      

  24.   

    error 1064(42000):you have an error in your sql syntax
      

  25.   

    贴你的出错代码,在MYSQL命令行下运行试试。上述代码已经 测试通过
      

  26.   

    原来是我的mysql版本问题,表名,字段名是不加引号的。可是导入到第105行的时候有报错了,说c_type的值不正确
      

  27.   

    检查TXT 文件内容,看看105行的值是什么
      

  28.   

    呵呵,问题解决了。将文本文件存为ascii码,将表设为utf8码就可以。很感谢wwwwb的帮忙!!
      

  29.   

    将表设为utf8码就可以:我的建表语句就是设为utf8