MySQL插入中文数据,提示Incorrect string value: ‘\xE5\xBC\xA0\xE4\xB8\x89‘ for column ‘name‘ at row xxx

问题描述:

使用MySQL创建user/student表时,插入中文数据发生错误。
SQL语句及SQLyog语句:

SQL:
	insert into `day07case`.`test` (`name`) values ('张三')
	
错误信息:
Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1

原因分析:

创建表时charset设置为Latin1,Latin1不支持中文字符,因此我们需要修改编码格式


解决方案:

  1. 查看user表

     	 	show create table user; 
    
  2. 将错误信息复制出来

    CREATE TABLE `user` (
    			  `id` int(11) NOT NULL AUTO_INCREMENT,
    			  `name` varchar(20) NOT NULL,
    			  `gender` varchar(5) DEFAULT NULL,
    			  `age` int(11) DEFAULT NULL,
    			  `address` varchar(32) DEFAULT NULL,
    			  `qq` varchar(20) DEFAULT NULL,
    			  `email` varchar(50) DEFAULT NULL,
    			  PRIMARY KEY (`id`)
    			) ENGINE=InnoDB DEFAULT CHARSET=latin1
    
  3. 分析错误:

    1. 由此发现charset设置为Latin1,Latin1不支持中文字符,因此我们需要修改编码格式

      ALTER TABLE USER DEFAULT CHARACTER SET utf8;
      
    2. 再次查看表

      show create table user; 	
      
      sql
      	CREATE TABLE `user` (
      	  `id` int(11) NOT NULL AUTO_INCREMENT,
      	  `name` varchar(20) CHARACTER SET latin1 NOT NULL,
      	  `gender` varchar(5) CHARACTER SET latin1 DEFAULT NULL,
      	  `age` int(11) DEFAULT NULL,
      	  `address` varchar(32) CHARACTER SET latin1 DEFAULT NULL,
      	  `qq` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
      	  `email` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
      	  PRIMARY KEY (`id`)
      	) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
      	```
      
    3. 依次修改:

      • 此时表的编码格式已经改变,但是列的编码格式显示为Latin1

      • 依此修改列的编码格式:

        ALTER TABLE USER CHANGE NAME NAME VARCHAR(20) CHARACTER SET utf8;
        ALTER TABLE USER CHANGE gender gender VARCHAR(5) CHARACTER SET utf8;
        ALTER TABLE USER CHANGE address address VARCHAR(32) CHARACTER SET utf8;
        ALTER TABLE USER CHANGE qq qq VARCHAR(20) CHARACTER SET utf8;
        ALTER TABLE USER CHANGE email email VARCHAR(50) CHARACTER SET utf8;
        
    4. 再次查看,问题解决!!!

      CREATE TABLE `user` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `name` varchar(20) DEFAULT NULL,
        `gender` varchar(5) DEFAULT NULL,
        `age` int(11) DEFAULT NULL,
        `address` varchar(20) DEFAULT NULL,
        `qq` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
        `email` varchar(50) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
      

拓展资料

  1. latin1:

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0xF之间是控制字符,0xA0-0xFF之间是文字符号。

  1. 本文用到的sql语句:

    • 查询某个数据库的字符集:查询某个数据库的创建语句

      show create database 数据库名称;

    • 修改数据库的字符集

      alter database 数据库名称 character set 字符集名称;

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值